如何在 JSF 中 hide/show selectOneMenu?

How to hide/show selectOneMenu in JSF?

我有一个 inputText 和一个 selectOneRadio 组件,当表单加载 selectOneRadio 应该被隐藏时。当用户 select inputText 时,我想显示 selectOneRadio 组件。我把 selectOneRadio 隐藏在 @PostConstruct 中,它应该显示在 select inputText 中。

<h:panelGrid id="panelgrid">
    <p:panel id="panel" >
        <h:outputLabel value="Name: " for="name" />
        <p:inputText id="name" value="#{userBean.name}" immediate="true">
        <p:ajax event="onselect" update="city" listener="#{userBean.showName}" />
        </p:inputText>
        <p:selectOneRadio  id="city" value="#{userBean.city}" layout="grid" columns="3" rendered="#{userBean.displayName}" >
            <f:selectItems value="#{userBean.cities}" var="c" itemLabel="#{city}" itemValue="#{city}" />
        </p:selectOneRadio> 
    </p:panel>
</h:panelGrid>

bean代码如下:

@PostConstruct
public void init() {
    displayName = false;
}

public boolean isShowName() {
    return true;
}

...

但有些这不起作用。我将 JSF2.0 与 primefaces 5.2 一起使用。

我找到了解决方案。

<h:form id="frm">
    <h:panelGrid id="panelgrid">
        <p:panel id="panel" >
        <h:outputLabel value="Name: " for="name" />
            <p:inputText id="name" value="#{userBean.name}" immediate="true" onkeypress="#{userBean.showName}">

                <p:ajax event="change" update="frm:panelgrid" listener="#{userBean.inputcangeeListener}" />
            </p:inputText>
        </p:panel>


            <p:panel id="p2" rendered="#{userBean.displayName}">
                <p:selectOneRadio id="city" value="#{userBean.city}" layout="grid" columns="3">
                    <f:selectItems value="#{userBean.cities}" var="c" itemLabel="#{city}" itemValue="#{city}" />
                </p:selectOneRadio>
            </p:panel>

        </h:panelGrid>
    </h:form>

我的托管 bean 看起来像-

    @PostConstruct
    public void init() {
        displayName = false;
    }

    public boolean isShowName(){
        return displayName;
    }

    public void inputcangeeListener(javax.faces.event.AjaxBehaviorEvent changeEvent){
        setDisplayName(true);
        cities = new ArrayList<>();
        cities.add("pune");
        cities.add("KOL");

    }

感谢您的回复。