当我选择第一个SelectOnMenu的任何项目时,我想更新第二个SelectOneMenu。现在,我从ManagedBean获取SelectOneMenus的值。我想我必须使用AJAX(jquery)将参数发送到ManagedBean。
<h:form> <div class="center"> <h:panelGrid id="editTable" columns="2" styleClass="center"> ... <h:outputText value="#{msg.timetable_list_category}" /> <h:selectOneMenu class="category"> <f:selectItems value="#{categoryBackingBean.categorys}" var="c" itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> </h:selectOneMenu> <h:outputText value="#{msg.timetable_list_seminarblock}" /> <h:selectOneMenu class="seminarblock"> <f:selectItems value="#{seminarblockBackingBean.seminarblocks}" var="s" itemLabel="#{s.seminarblock_Name}" itemValue="#{s.seminarblock_Id}" /> </h:selectOneMenu> ... </h:panelGrid> ... </div> </h:form>
实际上,您可以使用ValueChangeListener,当selectOneMenu的值更改时将调用它:
<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}"> <f:selectItems value="#{categoryBackingBean.categorys}" var="c" itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> </h:selectOneMenu>
然后,在您的bean中,您可以使用以下方法:
public void selectOneMenuListener(ValueChangeEvent event) { //This will return you the newly selected //value as an object. You'll have to cast it. Object newValue = event.getNewValue(); //The rest of your processing logic goes here... }
要更新页面,您可以将其添加onchange="submit()"到中<h:selectOneMenu/>。对于某些局部渲染,您可以尝试添加以下内容<f:ajax/>而不是onchange="submit()":
onchange="submit()"
<h:selectOneMenu/>
<f:ajax/>
<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}"> <f:selectItems value="#{categoryBackingBean.categorys}" var="c" itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> <f:ajax event="change" execute="@form" render="theIdOfTheComponentYouWantToReRender"/> </h:selectOneMenu>
如果我没记错的话,您将想要获取在第一个菜单中选择的元素的ID,并根据它填充第二个菜单。然后,您可以呈现另一个selectOneMenu,或者如果需要的话,呈现包装表单一部分的面板。