我使用的是primefaces selectoneradio
控件,它将在选择后显示或隐藏panelgrid
。但是不知道为什么它不能隐藏这个panelgrid
当选择所有教师广播。
public boolean getVisibleTeacherList() {
if (this.selectedAllTeachersFlag == "AllTeachers")
return false;
else
return true;
}
<p:panelGrid columns="2">
<p:selectOneRadio id="console" value="#{chkTeacherList.selectedAllTeachersFlag}">
<f:selectItem itemLabel="All teachers" itemValue="AllTeachers" />
<f:selectItem itemLabel="Selected teachers" itemValue="SelectedTeachers" />
<p:ajax update="panelGrid1a1" />
</p:selectOneRadio>
</p:panelGrid>
<p:panelGrid id="panelGrid1a1" rendered="#{chkTeacherList.getVisibleTeacherList()}" columns="1" styleClass="ui-edb-noneborder-grid">
<p:separator style="border: 1px solid #8c4eea;" />
<p:panelGrid id="panelGrid1" columns="3" styleClass="ui-edb-noneborder-grid">
<p:selectManyCheckbox layout="grid" id="gridTeacherName" value="#{chkTeacherList.selectedValue}"
columns="3">
<f:selectItems value="#{chkTeacherList.filterTeacherNameList}" var="teacher" itemLabel="#{teacher.teacherEngName}" itemValue="#{teacher.timRefNo}" />
</p:selectManyCheckbox>
</p:panelGrid>
<p:separator style="border: 1px solid #8c4eea;" />
</p:panelGrid>
问题可能与您的布尔getter getVisibleTeacherList
有关。visibleTeacherList
属性应该是isVisibleTeacherList
。
总之,我认为这个单独的属性是不必要的。你可以使用以下命令处理panelGrid的渲染:
rendered="#{chkTeacherList.selectedAllTeachersFlag eq 'AllTeachers'}"
要添加或删除组件(当它改变其rendered
值时),您需要更新的不是组件本身,而是它的一个祖先组件。
。例如,您的panelGrid1a1
位于parentPanel
内。
<p:outputPanel id="parentPanel">
<p:panelGrid id="panelGrid1a1" rendered="#{chkTeacherList.getVisibleTeacherList()}" ...
...
</p:outputPanel>
那么你的p:selectOneRadio
的p:ajax
应该更新parentPanel
。
<p:selectOneRadio id="console" ...
...
<p:ajax update="parentPanel" />
</p:selectOneRadio>
快速修复方法:
this.selectedAllTeachersFlag == "AllTeachers"
this.selectedAllTeachersFlag.equals("AllTeachers")
不同- "=="是一个引用比较,即两个对象都指向相同的内存位置。其中
- "equals()"计算对象中值的比较。