JSF重新呈现与selectBooleanCheckbox支持
题
我有在其予想有一个复选框,单击时,将添加/移除页面某些其它形式的字段JSF页面。下面是(简化的)代码我现在有用于复选框:
<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
<a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>
下面是用于我想隐藏该组件的代码:
<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 && backingBean.showComponentToReRender}">
<s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>
目前,点击复选框不执行任何操作;认为“selectOneMenu用于”不会消失。我在做什么错了?
解决方案
您需要包裹componentToReRender
在任一:
<h:panelGroup id="componentToReRenderWrapper">
或
<a4j:outputPanel id="componentToReRenderWrapper">
因此,有效地,你将有:
<h:panelGroup id="componentToReRenderWrapper">
<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 && backingBean.showComponentToReRender}">
<s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>
</h:panelGroup>
和改变reRender="componentToReRenderWrapper"
万一使用panelGroup
,或删除属性,如果你使用outputPanel
。
发现在 RichFaces的文档:
使用重新呈现时其指向具有“渲染”属性的分量最常见的问题。请注意,JSF并不标志着浏览器的DOM其中,元件的结果应该放在案“绘制的”条件返回false的地方。因此,在Ajax请求期间的分量变得渲染,RichFaces的提供渲染代码到客户端,但没有更新页面,因为更新的地方是未知的。您需要指向一个没有“渲染”属性父组件之一。作为替代方案,可以用包裹布局=“无”的组件。
其他提示
不要忘记对A4J设置ajaxRendered = “真”:outputPanel
不隶属于 StackOverflow