我有一个selectOneMenu有两个项目“Granted”和“Dismessed”
<p:panelGrid columns="2">
<p:outputLabel value="Result: "/>
<p:selectOneMenu id="omResult" value="#{opcoesMB.result}" style="width: 200px">
<f:selectItem itemLabel="Granted" itemValue="1"/>
<f:selectItem itemLabel="Dismessed" itemValue="2"/>
</p:selectOneMenu>
</p:panelGrid>
我还有两个selectOneMenu,其中一个从名为operationRestrictedList的列表中选取项目,在这种情况下,如果选择了“Granted”项,则使用它们。
<p:selectOneMenu id="omResultGranted" value="#{optionsMB.operationRestricted}" style="width: 200px">
<f:selectItem itemLabel="Select..." itemValue="#{null}"/>
<f:selectItems value="#{optionsMB.restricaoOperacaoList}" var="rest" itemLabel="#{rest.title}" itemValue="#{rest.id}"/>
</p:selectOneMenu>
另一个获取itemsityList调用的项目列表,如果选择了“desmissed”项,则会出现这种情况。
<p:selectOneMenu id="omResultDesmissed" value="#{optionsMB.irregularity}" style="width: 200px">
<f:selectItem itemLabel="Select... " itemValue="#{null}"/>
<f:selectItems value="#{opcoesMB.irregularilityList}" var="irregula" itemLabel="#{irregula.description}" itemValue="#{irregula.id}"/>
</p:selectOneMenu>
好吧我并不是那个意思,我想只有两个selectOneMenu,第二个被设置为第一个selectOneMenu中选择的项目,但我不知道如何做到这一点,我是新手jsf,有人可以帮我说一下我怎么能这样做?
答案 0 :(得分:1)
为此,您只需要一个监听器并更新第二个selectOneMenu。
XHTML:
<p:selectOneMenu id="id1" value="#{bean.item1}">
<f:selectItems value="#{bean.list1}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" />
<p:ajax update="id2" listener="#{bean.listener}" />
</p:selectOneMenu>
<p:selectOneMenu id="id2" value="#{bean.item2}">
<f:selectItems value="#{bean.list2}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" />
</p:selectOneMenu>
在您的bean中,您只需要为您的列表提供所需的值。
Bean:
public void listener() {
//Do some stuff for feeding you second list
list2.add(...);
}
答案 1 :(得分:0)
第二个selectMenu可以通过支持bean使用AJAX动态填充。
示例:
<h:selectOneMenu value="#{bean.selected}">
<f:selectItem itemValue="#{null}" itemLabel="Select..." />
<f:selectItem itemValue="one" />
<f:selectItem itemValue="two" />
<f:selectItem itemValue="three" />
<f:ajax listener="#{bean.listener}" render="result" />
</h:selectOneMenu>
BackingBean:
@ViewScoped
public class Bean implements Serializable {
private String selected;
private String result;
private List conditionalList; /*<-- You'll need setter and getter */
public void submit() {
System.out.println("submit");
}
public void listener(AjaxBehaviorEvent event) {
System.out.println("listener");
result = "called by " + event.getComponent().getClass().getName();
/* Add to list here */
conditionalList.add(getSelected());
}
public String getSelected() {
return selected;
}
public void setSelected(String selected) {
this.selected = selected;
}
public String getResult() {
return result;
}
}
填写其他selectMenu:
<p:selectOneMenu id="result" value="#{bean.selected2}">
<f:selectItems value="#{bean.conditionalList}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" />
</p:selectOneMenu>
答案 2 :(得分:-1)
我的解决方案..
<p:panelGrid id="pgResHighRisc"
columns="2">
<p:outputLabel value="Result: "/>
<p:selectOneMenu value="#{optionsMB.typeResult}">
<f:selectItem itemLabel="Granted"
itemValue="F"/>
<f:selectItem itemLabel="Desmissed"
itemValue="J"/>
<p:ajax event="change"
update="pgResHighRisc"/>
</p:selectOneMenu>
<p:outputLabel value="Restriction: "/>
<p:selectOneMenu value="#{optionsMB.operationRestriction}"
style="width: 200px"
rendered="#{'F' eq optionsMB.typeResult}">
<f:selectItems value="#{optionsMB.operationRestrictionList}"
var="oper"
itemLabel="#{oper.tittle}"
itemValue="#{oper.id}"/>
</p:selectOneMenu>
<p:selectOneMenu value="#{optionsMB.irregularity}" style="width: 200px"
rendered="#{'J' eq opcoesMB.typeResult}">
<f:selectItems value="#{optionsMB.irregularityList}" var="irreg"
itemLabel="#{irreg.description}"
itemValue="#{irreg.id}"
/>