ian*_*sme 3 jsf seam richfaces rerender ajax4jsf
我有一个JSF页面,我希望在其中有一个复选框,单击该复选框时,将从页面添加/删除某些其他表单字段.这是我目前为复选框提供的(简化)代码:
<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
<a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>
Run Code Online (Sandbox Code Playgroud)
这是我要隐藏的组件的代码:
<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 && backingBean.showComponentToReRender}">
<s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
目前,单击复选框不会执行任何操作 "selectOneMenu"不会消失.我究竟做错了什么?
Boz*_*zho 10
你需要包装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>
Run Code Online (Sandbox Code Playgroud)
reRender="componentToReRenderWrapper"如果您使用panelGroup,请更改您使用或删除该属性的情况outputPanel.
在RichFaces文档中找到了确切的解释:
使用reRender最常见的问题是将其指向具有"呈现"属性的组件.注意,JSF没有在浏览器DOM中标记应该放置组件结果的位置,以防"呈现"条件返回false.因此,在Ajax请求期间呈现组件之后,RichFaces将呈现的代码传递给客户端,但不更新页面,因为更新的位置未知.您需要指向其中一个没有"呈现"属性的父组件.作为替代方法,您可以使用layout ="none"包装组件.