【问题标题】:f:ajax listener on event=change not called inside ui:repeat [duplicate]f:ajax listener on event=change 未在 ui:repeat 中调用 [重复]
【发布时间】: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 事件中的执行属性。

标签: ajax jsf


【解决方案1】:

我无法直接回答您的问题,因为您的陈述说一切都很好。但我注意到您的代码中有以下内容。

  • 我们无法在内部创建 id,因为 JSF 视图不允许重复的 id。
  • 确保您的侦听器方法应具有参数AjaxBehaviorEvent For(例如 - methodXXXX(AjaxBehaviorEvent event)
  • 请确保我们不应呈现包含下拉操作的父组。
  • 让我们试试valueChangeListener,它是专门为值更改操作引入的。
  • 如果你想渲染父区域那么我建议你通过javascript来实现,因为我没有找到任何使用任何JSF组件的解决方案。

【讨论】:

  • 请解释一下您为什么这么认为?
  • 嘿@Kukeltje,好问题。我错过了动作在 内的部分。我已经用一些细节更新了我的答案。
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 2013-02-05
  • 2015-07-03
  • 2015-07-19
  • 2019-09-23
  • 2018-10-11
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多