我有在其予想有一个复选框,单击时,将添加/移除页面某些其它形式的字段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 &amp;&amp; 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 &amp;&amp; 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top