我有一个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上的问题/答案中列出的其他方法,但是我不确定何时使用执行,更新和呈现以及是否使用侦听器。 非常感谢
答案 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。