如何在JSF中隐藏/显示selectOneMenu?

如何在JSF中隐藏/显示selectOneMenu?,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,当表单加载selectOneRadio应该隐藏时,我有一个inputText和一个selectOneRadio组件。当用户选择inputText时,我想显示selectOneRadio组件。我已经将selectOneRadio隐藏在@PostConstruct中,它应该显示在selectinputText上 <h:panelGrid id="panelgrid"> <p:panel id="panel" > <h:outputLabel va

当表单加载
selectOneRadio
应该隐藏时,我有一个
inputText
和一个
selectOneRadio
组件。当用户选择
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>
但有些人认为这是行不通的。我将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");

    }
@PostConstruct
公共void init(){
displayName=false;
}
公共布尔值isShowName(){
返回显示名;
}
public void InputCangeListener(javax.faces.event.AjaxBehaviorEvent changeEvent){
setDisplayName(true);
城市=新阵列列表();
城市。添加(“浦那”);
城市。添加(“KOL”);
}

感谢您的回复。

另请看其他与jsf相关的基本内容和教程。问题有点不同,因为这显示的是不支持选择的事件。它显示在哪里?你没提过吗?之后,yoy将面临另一个问题。请使用一些展示和文档。所有的事件都在这里。你到底为什么要添加
immediate=“true”
?你到底从哪里“学到”的?我越来越多地从初学者的代码片段中看到这一点。因此,一定有一些误传的来源需要纠正。或者你是在关注JSF1.x资源而不是JSF2.x资源来寻找答案吗?巴卢斯:这个链接足够了吗?请在您的回答中说明这是一个解决方案的内容和原因。你的问题出了什么问题。。。值得注意的是,您修复了我的复制链接中的某些内容,但是通过更新panelgrid,不需要在select周围添加面板p2。您仍然可以将更新panelgrid更改为更新p2
    @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");

    }