尝试从另一个组件隐藏/显示时,JSF / Primefaces组件不会更新

时间:2018-07-13 08:06:27

标签: user-interface primefaces jsf-2 show-hide

我有一个Primeface xhtml页面,其中一个下拉菜单应该可见还是不可见,具体取决于页面上两个单选按钮的值。

我搜索了很多类似的问题,例如 Ajax render not working on SelectBooleanCheckbox 但似乎无法使其正常工作。 我的代码是

<p:fieldset id="Settings" legend="Settings" styleClass="pFieldSet_Template" style="margin-bottom: 5px;">
    <p:selectOneRadio id="showCars" value="#{settingsHandler.beanSelected.showCars}">
    <p:ajax event="change" render="carSelection"/>
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <f:selectItem itemLabel="No" itemValue="false" />
    </p:selectOneRadio>
        <p:selectOneMenu id="carSelection" value="Mercedes" rendered="#{settingsHandler.beanSelected.showCars}">
            <f:selectItem itemLabel="Mercedes" itemValue="Mercedes" />
            <f:selectItem itemLabel="Volvo" itemValue="Volvo" />
            <f:selectItem itemLabel="Fiat" itemValue="Fiat" />
        </p:selectOneMenu>
</p:fieldset>

我在后备bean中有对应的getter和setter,如下所示:

private Boolean showCars = new Boolean(false);

@Column(name = "SHOWCARS", nullable=false, columnDefinition = "bit default 'true'")
public Boolean getShowCars() { return showCars; }
public void setShowCars(Boolean value) { showCars = value; }

即使单击单选按钮,菜单也没有任何反应。类似于我上面写的链接所建议的那样,我尝试将其包装在始终呈现的另一个组件中,但这都没有帮助。代码是:

<p:fieldset id="Settings" legend="Settings" styleClass="pFieldSet_Template" style="margin-bottom: 5px;">
    <p:selectOneRadio id="showCars" value="#{settingsHandler.beanSelected.showCars}">
    <p:ajax event="change" render="group"/>
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <f:selectItem itemLabel="No" itemValue="false" />
    </p:selectOneRadio>
    <h:panelGroup id="group">
        <p:selectOneMenu id="carSelection" value="Mercedes" rendered="#{settingsHandler.beanSelected.showCars}">
            <f:selectItem itemLabel="Mercedes" itemValue="Mercedes" />
            <f:selectItem itemLabel="Volvo" itemValue="Volvo" />
            <f:selectItem itemLabel="Fiat" itemValue="Fiat" />
        </p:selectOneMenu>
    </h:panelGroup>
</p:fieldset>

我也尝试过在Stackoverflow上的问题/答案中列出的其他方法,但是我不确定何时使用执行,更新和呈现以及是否使用侦听器。 非常感谢

1 个答案:

答案 0 :(得分:1)

您使用了错误的属性。在p:ajax中,您应该在第二种方法上使用update属性(第一种方法不起作用)。所以:

<p:ajax update="group"/>

请注意,更改事件是默认事件,因此我将其省略。有关p:ajax标签的更多信息,请查看文档PDF并查找/滚动到“ AjaxBehavior”。

关于第一种方法,请参见Ajax update/render does not work on a component which has rendered attribute