用JSF的valueChangeListener也是可以实现表单联动的,当下拉框中选择一个值后,会往后台backbean中传入刚才所选中的ID,这个ID可以做为另外一个下拉框内容的查询条件,具体如下:
JSP页面
下拉框1:
<h:panelGroup>
<h:selectOneMenu id="planID" value="#{testBB.planID}" οnchange="submit();" valueChangeListener="#{testBB.changeStatus}">
<c:selectItems value="#{testBB.queryList}"></c:selectItems>
</h:selectOneMenu>
</h:panelGroup>
下拉框1中的内容在页面进行初始化的时候对数据库进行查询,将查询到的结果封装到list中,在页面上用selectOneMenu一关联就出来了。主要是看它是怎么和另一个下拉框关联起来的,当下拉框1选中内容时,会触发onchange事件,此时会调用valueChangeListener中指定的方法,同时会将选中值的ID传入后台,代码如下:
public void changeStatus(ValueChangeEvent event){
......
planID = event.getNewValue().toString();//得到页面传过来的planID
......
resultList = testucc.getPersons(planID);//调用查询数据库的语句
}
这样根据第一个下拉框传过来的planID查询出来的结果就封装到了list中,getPersons方法是对查询结果进行具体封装的
下拉框2:
<h:panelGroup>
<h:selectOneMenu id="itemID" value="#{testBB.itemID}">
<c:selectItems value="#{testBB.resultList}"></c:selectItems>
</h:selectOneMenu>
</h:panelGroup>
通过与resultList进行关联下拉框2中的值就出来了