我有一个场景要实现,但我不知道如何实现(我使用的是素数面)场景是:我有一个selectOneMenu,其中包含用户可以选择的选项,当用户选择一个选项时,selectOneMenu下面应该出现一个"表单"或"子页面",用户应该填写它。"子页面"根据选择的选项而变化
例如:选项1-->子页面1
选项2-->子页面2等。
JSF-
<h:selectOneMenu style="width:200px" immediate="true" value="#{ToolsKPI.myChoice}" onchange="submit()" valueChangeListener="#{BeanTest.selectChangeHandler}" required="true" >
<f:selectItems value="#{ToolsKPI.getMyListKPI()}" />
</h:selectOneMenu>
<p:panel rendered="#{BeanTest.showPanelBool}" >
<h1>KPI1</h1>
<br></br>
<h:inputText value="test1" />
</p:panel>
<p:panel rendered="#{BeanTest.showPanelBool1}" >
<br></br>
<h1>KPI2</h1>
<h:inputText value="test2" />
<h:inputText value="test3" />
</p:panel>
我的豆子
public class BeanTest implements java.io.Serializable {
private String myChoice;
private boolean showPanelBool;
private boolean showPanelBool1;
public BeanTest() {
}
//getters ande setters
public void selectChangeHandler(ValueChangeEvent event){
myChoice = (String) event.getNewValue(); // Must however be the exact page URL. E.g. "contact.jsf".
FacesContext.getCurrentInstance().getExternalContext();
if(myChoice.equals("Number Of Closed issues") ){
this.showPanelBool = true;
} else{
this.showPanelBool = false;
this.showPanelBool1 = true;
}
FacesContext.getCurrentInstance().renderResponse();
}
}
您真的应该发布一些代码的外观:图片之类的。您可能正在寻找一个"p:outputPanel"组件或类似的东西。
http://www.primefaces.org/showcase/ui/outputPanel.jsf
您可以使用类似的ValueChangeListener做一些事情
public void onSelectItem(ValueChangeEvent evt)
{
if("someValue".equals(evt.getNewValue())
showPageOne = true;//boolean
else
showPageTwo = true;//boolean
}
//JSF
<h:form id="myForm">
<h:selectOneMenu valueChangeListener="#{myBean.onSelectItem}" update="myForm">
<f:selectItems value="items">
</h:selectOneMenu>
<p:outputPanel rendered="#{myBean.showPageOne}">
hi I'm page one
</p:outputPanel>
<p:outputPanel rendered="#{myBean.showPageTwo}">
hi I'm page two
</p:outputPanel>
</h:form>
很抱歉使用了伪代码,Primefaces上的示例将在这里真正帮助您。OutputPanel经常帮我节省开支。您需要指定一个更新目标,但该示例非常清晰且易于运行。玩吧。
(Primefaces也很棒,你可能会对他们的组件套件感到非常满意)