我在用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,开头如下
,其中mainpage.xhtml包含h:head,并通过使用ui:include包含'header.xhtml',还有一个h:form。但是这个h:form之前已经关闭了,所以问题不在这里。
好吧,我不想再次添加h:form,因为它会导致未指定的行为。但是,如果我的p:selectbooleancheckbox值没有正确设置,我做错了什么?
谢谢你的帮助!
更新
问题不在于h:表单,因为它实际上不是嵌套的。现在我仍然停留在p:selectonemenu的监听器上,因为它们没有被调用。我还尝试在
上设置partialsubmit=“true”
,但到目前为止还没有找到解决方案。
谢谢你们的帮助,伙计们。在你的帮助下我解决了这个问题。
就像其他人遇到类似的问题一样,这里有几件事要检查:
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更改 “当值更改来自模型时,不评估表达式。” <-我也需要这个。模型以任何方式更改时,如何在控制器中触