繁体   English   中英

Primefaces p:selectOneMenu或p:selectBooleanCheckbox不触发更改事件,具体取决于我是否使用h:form

[英]Primefaces p:selectOneMenu or p:selectBooleanCheckbox not firing change-event depending on if I use h:form

我正在使用Primefaces 5.3。

首先,根据这篇文章,我实现了根据ap:selectBooleanCheckbox的值更改ap:selectOneMenu可见性的功能:

通过选择复选框启用和禁用组件

到目前为止,如果我使用h:form,则此方法有效。

接下来,我想更新p:selectOneMenu中选择的bean中的值。 这是我的问题开始的地方:即使我使用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的ap:tab中,其中“任务”是我的DataObject-List的变量。

如@BalusC在这篇文章中所提到的: 未调用commandLink / commandButton / ajax支持bean操作/侦听器方法 (可能的原因:2),

“您不能相互嵌套多个UIForm组件。”

因此,如果我删除h:form指令,则对Bean中的侦听器的调用有效。 但是现在,p:selectBooleanCheckbox的值始终设置为“ false”,因此该组件未更新为可见。

我在这里找到了一篇文章,其中OP存在相同的问题,并通过添加h:form指令解决了该问题。

编辑:我的“表单”是ui:composition,并且像这样<ui:composition template="/templates/pages/mainPage.xhtml"> ,其中mainPage.xhtml包含h:head并包含“ header.xhtml”使用ui:include,并且有ah:form。 但是此h:form之前已经关闭,因此问题不在这里。

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

谢谢您的帮助!

更新

问题不是h:form,因为它实际上不是嵌套的。 现在,我仍然停留在p:selectOneMenu的监听器上,因为它们没有被调用。 我还尝试在<p:ajax />上设置partialSubmit="true" ,但到目前为止还没有找到解决方案。

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

就像其他人遇到类似的问题一样,这里需要检查一些事项:

  1. 如@irieill的答案中所述,在此处检查@BalusC的答案。
  2. 检查是否要在selectOneMenu中显示对象的equals()hashCode()

@irieill的评论中实际上提到了针对我的情况的解决方案:

[..]不提供适当的转换器不会引发任何异常,但是会遇到错误消息。 因此,请尝试在页面上添加<p:growl autoUpdate="true" /> ,以查看是否出现任何转换错误。 如果是这样,请将propper转换器添加到selectOneMenu

我认为,这也是@BalusC在其可能原因列表的第3点说的话。

另请参阅: 如何为<p:pickList>编写定制转换 器,JSF 2.0中的定制转换器PrimeFaces ShowCase:SelectOneMenu

就像@BalusC在这篇文章中提到的那样: 未调用commandLink / commandButton / ajax支持bean操作/侦听器方法

还要注意第1点。您必须使用<h:form />标记将输入组件括起来。

好吧,我不想再添加h:form,因为它会导致未指定的行为。

据我了解,您正在滥用标签,或者您不知道如何使用它。 只需将整个页面(或至少所有输入组件)封装在一个<h:form />标记中,它就可以工作。

您能否用页面代码更新您的问题,该页面代码还包含放置<h:form />标记的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM