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

Primefaces P:SelectOneMenu或P:SelectBooleanCheckBox不触发change-event取决于我是否使用H:Form

笪波鸿
2023-03-14

我在用Primefaces 5.3。

首先,我实现了根据p:SelectBooleanCheckBox的值更改p:SelectOneMenu的可见性的功能:

接下来,我想更新bean中的值,这是在p:selectonemenu中选择的。这就是我的问题开始的地方:即使我使用p:ajax显式调用一个侦听器,它也不会被调用。这是我的代码:

 <h:panelGrid>
            <p:selectOneMenu value="#{schedulerCDIBean.selectedParentTask}" var="parentTask"  id="taskDependence" disabled="#{task.dependsOn != 'true'}">

                <p:ajax  event="change" listener="#{schedulerCDIBean.taskToAddListener}"/>

                <f:selectItems id="taskDependenceItems" value="#{schedulerCDIBean.taskWebDataObjectList}"   var="item" itemLabel="#{item.taskName}" 
                itemValue="#{item}"  />

               <p:column>
                   <h:outputText value="#{parentTask}"/>
               </p:column>

    </p:selectOneMenu>
</h:panelGrid>

下面是我如何启用/禁用SelectOneMenu:

<p:selectBooleanCheckbox id="dependsOnTask" value="#{task.dependsOn}" itemLabel="Depends On">       
        <p:ajax update="taskDependence" process="@this"/>
</p:selectBooleanCheckbox>

所有这些都存在于p:accordionPanel的p:tab中,其中'task'是我的DataObject-List的var。

我在这里找到了一个帖子,那里的OP也有同样的问题,并通过添加h:form指令解决了这个问题。

编辑:我的'form'是一个ui:composite,开头如下 ion>,其中mainpage.xhtml包含h:head,并通过使用ui:include包含'header.xhtml',还有一个h:form。但是这个h:form之前已经关闭了,所以问题不在这里。

好吧,我不想再次添加h:form,因为它会导致未指定的行为。但是,如果我的p:selectbooleancheckbox值没有正确设置,我做错了什么?

谢谢你的帮助!

更新

问题不在于h:表单,因为它实际上不是嵌套的。现在我仍然停留在p:selectonemenu的监听器上,因为它们没有被调用。我还尝试在 上设置partialsubmit=“true”,但到目前为止还没有找到解决方案。

共有1个答案

长孙阳嘉
2023-03-14

谢谢你们的帮助,伙计们。在你的帮助下我解决了这个问题。

就像其他人遇到类似的问题一样,这里有几件事要检查:

  1. 在这里检查@balusc的答案,正如@irieill的答案中也提到的。
  2. 检查是否有您愿意在SelectOneMenu中显示的对象的equals()HashCode()

针对我这种情况的解决方案其实在@irieill的评论中提到过:

另请参见:如何为 编写自定义转换器,JSF 2.0中的自定义转换器,PrimeFaces Showcase:SelectOneMenu

 类似资料:
  • 下面是有问题的代码: 目前,在

  • 给文本框添加监听事件,监听文本框里面文字的变化例如:   $('#exhibita').bind('hastext', function () { $('#exhibitaButton').removeClass('disabled').attr('disabled', false);}); $('#exhibita').bind('notext', function () { $('#exh

  • 问题内容: 我正在使用ng-pattern来验证某些表单字段,并且正在使用ng-change来监视和处理任何更改,但是ng-change(或$ scope。$ watch)仅在form元素位于$有效状态!我对angular还是陌生的,所以我不知道如何解决这个问题,尽管我怀疑应该采用新的指令。 在ng-pattern仍然像以前一样设置表单元素状态的情况下,如何在$ invalid和$ valid表单

  • 问题内容: 大约一个月前,米特的问题没有得到解答。可悲的是,我现在遇到了同样的情况。 情况如下:我正在使用jQuery捕获单选按钮中的更改。选择单选按钮后,我将启用一个编辑框。当取消选择单选按钮时,我希望禁用编辑框。 使能的作品。当我在组中选择其他单选按钮时, 不会 触发该事件。有谁知道如何解决这一问题? __ 问题答案: 看起来该函数仅在您选中单选按钮时才调用,而不是在取消选中它时才调用。我使用

  • 问题内容: 我有一个选择标签,如下所示: 并且我为此使用了jQueryUI控件(组合框),则从jQuery触发的事件“更改”不会触发doSomething()。 您知道如何从外部角度触发ng-change吗? 问题答案: 糟糕-这是很糟糕的做法-但您可以使用目标控制器中驻留的元素并从中获取。 例: Javascript: 现在,您的变量可以访问控制器上定义的所有方法。

  • 问题内容: 输入如下: 当我手动键入并更改输入时,将执行。但是,如果我以编程方式通过其他功能更改了repair.test值,则不会触发ng- change的操作。我已经阅读了角度教程,这可能是预期的行为。 https://docs.angularjs.org/api/ng/directive/ng更改 “当值更改来自模型时,不评估表达式。” <-我也需要这个。模型以任何方式更改时,如何在控制器中触