JSF 下拉框

来源:互联网 发布:新网域名续费 编辑:程序博客网 时间:2024/04/29 04:55

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>&nbsp;</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中再处理需要的逻辑.