当前位置: 首页 > 知识库问答 >
问题:

p:ui:repeat/h:dataTable中的日历错误,无法获取所选索引

倪炎彬
2023-03-14

我得到了一个ui:使用actionlisteners重复一些输入元素,如果这些元素是由用户编辑的,我想更改它们的样式。

我知道,通过ui:repeat,服务器端和客户端的组件具有不同的作用域。因此,我希望获得所选的循环索引或元素的clientID来调用javascript函数来更改样式。

这对我的selectOneMenu很好,我使用ajax调用一个方法并获得正确的clientID。但是如果我在日历上尝试同样的事情,我总是会得到ui的最后一个元素/索引:repeat循环,而不是选中的一个。。。

我的jsf:

<ui:repeat var="carservice" value="#{searchCarProject.editProjects}" varStatus="loop" id="repeat">
<p:selectOneMenu id="menu1" value="#{carservice.carProject.brand}" style="width:38px !important;">
    <f:selectItem itemLabel="" itemValue="" />
    <f:selectItems value="#{searchCarProject.carProjectBeanService.brands}" var="i" itemLabel="#{i.value} - #{i.label}" itemValue="#{i}"/>
    <p:ajax event="change" listener="#{searchCarProject.menuSelect}" update="errorGrid innerGrid " partialSubmit="true"/>
    <f:converter binding="#{mlCarProjectAttributeConverter}" />
</p:selectOneMenu>

<p:calendar id="cal1" widgetVar="deDateWidget" pattern="dd.MM.yyyy" value="#{carservice.carProject.termin_de}" mindate="#{searchCarProject.currentDate}" navigator="true">
    <p:ajax event="dateSelect" listener="#{searchCarProject.calSelect}"/>
</p:calendar>
</ui:repeat>

我的服务器方法:

    //for selectOneMenues
public void menuSelect(final AjaxBehaviorEvent event) {
    final String id = event.getComponent().getClientId();
    //id = selectionForm:entryActionTabs:repeat:0:menu1 <- 0 = the right selected one    
}

//for calendar
public void calSelect(final AjaxBehaviorEvent event) {
    final String id = event.getComponent().getClientId();
    //id = selectionForm:entryActionTabs:repeat:5:cal1 <- always 5 = always the last index    
}

因此,在事件发生后,我不会为日历提供正确的值,我认为我应该尝试使用var属性:

<p:calendar id="de_calendar" widgetVar="deDateWidget" pattern="dd.MM.yyyy" value="#{carservice.carProject.termin_de}" mindate="#{searchCarProject.currentDate}" navigator="true">
    <f:ajax event="dateSelect" listener="#{searchCarProject.calSelectWithAttributes(**loop.index,carservice.carProject.name**)}"/>
</p:calendar>

但我仍然只得到最后的值,如果我做同样的选择OneMenu我得到选择的那些...

public void calSelectWithAttributes(final int index, final String name) {
index = always 5 = always the last index, name = obj name, is always the last one same as index
}

所以我不知道为什么selectOneMenu给了我正确的循环。索引/属性/事件,但只有日历始终是最后一个。。。

编辑:甚至尝试使用h: dataTable,完全相同的问题...Ajax事件总是返回日历的最后一个id。

共有2个答案

吕骞尧
2023-03-14

日历似乎只是被窃听了,尝试了大量其他primefaces组件,除日历外,所有组件都工作正常。。。

所以我放弃了正常的方法来解决这个问题。所以现在我调用我的js方法,获取ID,触发远程通信,并从远程通信方法中读取保存的值比这个好。

你可以在这里找到一个例子:http://blogs.bytecode.com.au/glen/2013/09/25/calling-primefaces-remotecommand-with-javascript-arguments.html

朱兴运
2023-03-14

删除在您的p:日历中的widgetVar="deDateWidget",当您使用ui:重复

 类似资料:
  • 我们需要获取Office 365日历帐户中的所有日历 我们基本上对endpointhttps://graph . Microsoft . com/v 1.0/users/[log-in-user-id]/calendars进行api调用 但是当我们调用API时,它只返回10个日历(最多)!? 任何帮助/提示表示赞赏!

  • 问题内容: 我正在使用位于此处的教程:http : //addyosmani.github.io/backbone-fundamentals/#create- a-simple-web-server 并添加了以下代码。 在启动服务器后,我收到一条错误消息,指出访问时的错误,我只是想知道是否有人对这个错误了解很多,因为Express和Node对我来说是新的? 问题答案: 我认为您缺少路线,您需要定义

  • 我想创建一个日历对象,并将其设置为某一年和该年中的一周。 当我将calendar对象传递给setWeekChecked方法时,这是它的toString: java.util.gregoriancalendar[time=?,arefieldsset=false,lenient=true,zone=America/New_York,firstDayofWeek=1,minimalDaysinfirs

  • 我正在尝试使用Camel FTP组件(Camel 2.19.0)检索文件: 从跟踪日志中,我可以看到Camel正在正确地列出目录中的文件: 但是,当Camel试图处理每个文件时,它似乎将相对目录预置到绝对目录,并且无法找到结果的乱码路径: FTPComponent构造的日志中的此路径不正确:

  • 尝试fAuth=FirebaseAuthException时出错。getInstance();

  • 尝试运行我的蝗虫文件时,在尝试命令蝗虫-f蝗虫文件.py--host时,我遇到了以下错误=http://localhost:8080 文件“/home/sonali/.local/lib/python3.6/site packages/蝗虫/user/task.py”,第280行,运行self.schedule_任务(self.get_next_task())文件“/home/sonali/.lo