我有一个p:SelectOneRadio,表格中有4个选项。 我想将条件Rendered设置为false只在一个f:SelectItem中,具体取决于用户配置文件(存储在会话中)
例如:如果用户是管理员,他可以看到选项4(f:selectItem)。
我已经知道怎么做了,但似乎组件SelectItem没有“Rendered”属性,我应该用它来做什么?
<p:selectOneRadio id="rdnNivel"
value="#{empresaController.selected.nivel}" layout="custom"
required="true"
requiredMessage="Select one option">
<f:selectItem itemLabel="Option 1" itemValue="1" />
<f:selectItem itemLabel="Option 2" itemValue="2" />
<f:selectItem itemLabel="Option 3" itemValue="3" />
<f:selectItem itemLabel="Option 4" itemValue="4"/>
谢谢!
答案 0 :(得分:0)
感谢@perissef
解决了问题豆:
private List<SelectItem> niveis = new ArrayList<SelectItem>();
public Collection<SelectItem> getNiveis() {
if (niveis.isEmpty()) {
this.niveis.add(new SelectItem(1, "Option 1"));
this.niveis.add(new SelectItem(2, "Option 2"));
this.niveis.add(new SelectItem(3, "Option 3"));
if (FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("perfil") == "ADM") {
this.niveis.add(new SelectItem(4, "option 4"));
}
}
return niveis;
}
xhtml,自定义primefaces selectOneRadio:
<p:selectOneRadio id="rdnNivel"
value="#{empresaController.selected.nivel}" layout="custom"
required="true">
<f:selectItems value="#{empresaController.niveis}" />
</p:selectOneRadio>
<p:panelGrid columns="2">
<p:radioButton id="opt1" for="rdnNivel" itemIndex="0" />
<h:outputLabel for="opt1" value=" Nivel 1" />
<p:radioButton id="opt2" for="rdnNivel" itemIndex="1" />
<h:outputLabel for="opt2" value=" Nivel 2" />
<p:radioButton id="opt3" for="rdnNivel" itemIndex="2" />
<h:outputLabel for="opt3" value=" Nivel 3" />
<p:radioButton id="opt4" for="rdnNivel" itemIndex="3"
rendered="#{(sessionScope['perfil'] == 'ADM')}" />
<h:outputLabel for="opt4" value=" Nivel 4"
rendered="#{(sessionScope['perfil'] == 'ADM')}" />
</p:panelGrid>