【发布时间】:2019-10-16 10:04:58
【问题描述】:
我正在使用 Soteria 1.0.1、Mojarra 2.3.9 和 PrimeFaces 6.1。关于 Glassfish 5.1
在 ui:repeat 中,不会在更改事件上调用 ajax 侦听器。侦听器仅在单击事件上调用一次。 应该使用哪个事件?
我已经使用foreach进行了迭代,但是没有调用监听器。
我已将执行属性从 @this 更改为 :frmOverviewPlant:selectDyna3 和 :rep_mandatory3:selectDyna3 ,但仍然没有调用监听器
如果我将 f:ajax event="change" 更改为 f:ajax event="click" 监听器会被调用,但只会调用一次。
如果我省略属性 execute: 和 render: ,并使用 immediate="true" 代替,则调用侦听器。但这没有用,因为该值不会发送回侦听器。
如果我在 ui:repeat 之外使用相同的 selectOneMenu,即使没有设置 ajax 属性执行,也会调用侦听器。
哪个组件可用于迭代动态生成的列表?每次选择另一个主要项目时,该列表都会更改。该主要项目的详细信息在表单中呈现。
这种行为是由 ui:iterate 引起的吗?或通过 ajax-attributes 事件的无效值:或渲染:或执行:?
<h:form id="frmOverviewPlant" prependId="false">
<table style="width: 30%" border="0">
<ui:repeat id="rep_mandatory3" value="#{assortiment.mandatoryPropertyList}" var="VBNprop">
<tr><td class="noWrap"> <h:outputText styleClass="#{VBNprop.codevaluesW.value == null ? 'error' : ''}" value="#{msg[VBNprop.codevaluesW.mainCode]}"/></td>
<td class="noWrap">
<h:selectOneMenu id="selectDyna3" value="#{assortiment.plantdetail.addedProperty}" > <f:selectItems value="#{VBNprop.codevaluesList}" />
<f:ajax event="change" listener="#{assortiment.checkAddProperties}" execute="@this" render=":frmOverviewPlant:idTabView:grp_properties"/>
</h:selectOneMenu>
</td>
</tr>
</ui:repeat>
</table>
</h:form>
我希望调用侦听器以使用所选选项更新主项。
【问题讨论】:
-
首先,我们不能在
中创建 id 对吧?因为 JSF 会抛出重复 id 的异常。 -
OP 是否说他得到了重复 ID 的例外情况.. ??
-
感谢大家,我已经进行了 2 处更改,现在它可以工作了:1. stackoverflow.com/questions/2118656/… 的“可能原因 nr 4.”,我创建了 ui:repeat 中使用的列表作为最终列表并在需要时用新项目重新填充它 2. 我已经删除了 ajax 事件中的执行属性。