如何在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
中,它应该显示在selectinputText
上
<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");
}