用JSF的valueChangeListener也是可以实现表单联动的,当下拉框中选择一个值后,会往后台backbean中传入刚才所选中的ID,这个ID可以做为另外一个下拉框内容的查询条件,具体如下:
JSP页面
下拉框1:
<h:panelGroup>
<h:selectOneMenu id= "planID" value= "#{testBB.planID}" onchange= "submit();" valueChangeListener= "#{testBB.changeStatus}">
<c:selectItems value= "#{testBB.queryList}"></c:selectItems>
</h:selectOneMenu>
</h:panelGroup>
<h:selectOneMenu id= "planID" value= "#{testBB.planID}" onchange= "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 = 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>
<h:selectOneMenu id= "itemID" value= "#{testBB.itemID}">
<c:selectItems value= "#{testBB.resultList}"></c:selectItems>
</h:selectOneMenu>
</h:panelGroup>
通过与resultList进行关联下拉框2中的值就出来了
本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/354186,如需转载请自行联系原作者