如何将f:selectItem的可见性设置为p:selectOneRadio?

时间:2013-05-17 15:18:05

标签: java jsf primefaces

我有一个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"/>

谢谢!                     

1 个答案:

答案 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>