JSF PrimeFaces overlayPanel 提交值
Posted
技术标签:
【中文标题】JSF PrimeFaces overlayPanel 提交值【英文标题】:JSF PrimeFaces overlayPanel submit value 【发布时间】:2013-05-29 01:52:36 【问题描述】:我想从 overlayPanel 向 bean 提交值表单 jsf 页面,并带有如下复选框:
为了显示覆盖面板和 ajax 提交,我使用了这段代码,并在调试器中看到它没问题:
<p:commandButton id="joinBtn" value="Basic" type="button" disabled="#dataPropertyCurrent.notJoinable"/>
<p:overlayPanel id="joinPanel" for="joinBtn" appendToBody="true" dynamic="false">
<f:facet name="header">Details</f:facet>
<p:dataList value="#treeBean.getDataPropsCouldBeJoinedWith(dataPropertyCurrent)" type="definition" var="dataJoinVal">
<h:panelGrid columns="2" cellpadding="10">
<h:column>
<p:selectBooleanCheckbox value="#dataJoinVal.checked" id="cbID">
<p:ajax event="change" update="cbID" partialSubmit="true"/>
</p:selectBooleanCheckbox>
</h:column>
<h:column>
<h:outputText value="#dataJoinVal.caption" />
</h:column>
</h:panelGrid>
</p:dataList>
<!--<p:commandButton value="Apply" id="btnApplyJoin" type="button" process="@parent" />-->
<h:outputLabel value="ID: #dataPropertyCurrent.joinDataPropertyId" />
</p:overlayPanel>
但是当overlayPanel被隐藏并使用此代码按下表单提交按钮之后:
<p:commandButton value="Apply join" update="joinAccordionPanel,dsAccordionPanelMain" actionListener="#treeBean.applyJoinOptions" />
它再次将“false”设置为 bean 布尔值。
那么如何正确提交overlayPanel值给bean呢?
PrimeFaces 版本:3.5
【问题讨论】:
it sets "false" to bean boolean value again.
是什么意思?布尔值在任何时候都是 true 还是非原始 Boolean
?
首先,通过勾选复选框上的 ajax 事件将 bean 布尔值设置为“true”,但之后按下“提交”按钮以传输更多表单数据 - 它尝试将“false”设置为bean 布尔变量。
可以发一下treeBean.applyJoinOptions
的代码吗?
这里没什么有趣的,只是迭代包含布尔值的 POJO 列表。
【参考方案1】:
我在这里找到了解释:http://forum.primefaces.org/viewtopic.php?f=3&t=30550#p97737:
"如果您使用 appendToBody,强烈建议您在 overlayPanel 组件中使用一个表单来包装所有输入字段和按钮。这是您在上一个解决方案中所做的。但是,这意味着您不能放置由于嵌套表单的限制,xhtml 页面中另一个表单内的 overlayPanel。最好的解决方案通常是在不是绝对必要的地方避免 appendToBody。"
编辑
我在 overlayPanel 中添加了<h:form>
,现在可以正常工作了:
<p:overlayPanel id="joinPanel" for="joinBtn" appendToBody="true" dynamic="true" >
<h:form id="formTmp">
<f:facet name="header">Details</f:facet>
<p:dataList value="#treeBean.getDataPropsCouldBeJoinedWith(dataPropertyCurrent)" type="definition" var="dataJoinVal">
<h:panelGrid columns="2" cellpadding="10">
<h:column>
<p:selectBooleanCheckbox value="#dataJoinVal.checked" id="cbID">
<p:ajax event="change" update="cbID" partialSubmit="true"/>
</p:selectBooleanCheckbox>
</h:column>
<h:column>
<h:outputText value="#dataJoinVal.caption" />
</h:column>
</h:panelGrid>
</p:dataList>
</h:form>
</p:overlayPanel>
【讨论】:
以上是关于JSF PrimeFaces overlayPanel 提交值的主要内容,如果未能解决你的问题,请参考以下文章
JSF 页面元素无法从具有动作属性的支持 bean 触发方法。(JSF2.0 + primefaces)
JSF + PrimeFaces:`update` 属性不更新组件