jsf 下拉框其实很好用,就是<h:selectOneMenu ..../>标签,具体写法如下:<table> <tbody> <tr> <td width="101"><h:selectonemenu id="tsmCompanyId" value="#{loginBean.tsmCompanyId}" binding="#{webinput_dropDown.tsmCompanyId}"><f:selectitems value="#{webinput_dropDown.tsmCompanyIdList}"></f:selectitems></h:selectonemenu></td> </tr> <tr> </tr> </tbody></table><p> </p>其中webinput_dropDown是绑定数据,提供UIInput的类的抽象,loginBean是需要绑定backing bean的类.webinput_dropDown.tsmCompanyId,这里的tsmCompanyId是UIInput,类的代码如下:public class BaseSelectItemListBean { private UIInput tsmCompanyId=null; public String[] getSelectedTsmCompanyIdes() { return getAsString(this.getTsmCompanyId().getValue()); } private String[] getAsString(Object tmp) { String[] result = null; if (tmp!=null) { if (tmp.getClass().isArray()) { int size = Array.getLength(tmp); if (size>0) { result=new String[size]; for(int i=0; i<size; ++i) { result[i] = (String) Array.get(tmp, i); } } } else { result = new String[1]; result[0] = (String) tmp; } } return result; }
//****************
public String getTextValue() { textValue = ""; String[] tsmCompanyIdes=getSelectedTsmCompanyIdes();
if(tsmCompanyIdes!=null) { textValue=tsmCompanyIdes.length==1? "tcmCompanyId:": "tsmCompanyIdes:"; for(int i=0; i<tsmCompanyIdes.length; ++i) { textValue +=" "+tsmCompanyIdes[i]; } textValue += ". "; }
return textValue; }
public UIInput getTsmCompanyId() { return tsmCompanyId; }
public void setTsmCompanyId(UIInput tsmCompanyId) { this.tsmCompanyId = tsmCompanyId; }
//*******************获取公司的信息**************
public List getTsmCompanyIdList() { return SelectItemDAO.getTsmCompanyIdList(); }
其中getTsmCompanyIdList方法封装在另一个类SelectItemDAO中,具体写法如下:
public class SelectItemDAO {
/** * Return a list of Company * * @param returnOnlyMainOffices * @return */ public static List getTsmCompanyIdList() { List result = new ArrayList(); result.add(new SelectItem("-1", "请选择"));
List children = DaoFacade.getInstance().getSystemManager() .getTsmCompanyDAO().findAllCompany(); TsmCompany tsmCompany = new TsmCompany(); if (children.size() > 0) { for (int i = 0; i < children.size(); i++) { tsmCompany = (TsmCompany) children.get(i); result.add(new SelectItem(String.valueOf(tsmCompany.getId()), tsmCompany.getCompanyName())); } }
return result; }
}
如上的写法,通过hibernate和数据库交互,读出公司表中的信息.
所以使用JSF还是很方便的,在页面只需要一个<h..../>标签,在backing bean中再处理需要的逻辑.
