大可制作:QQ群:31564239(asp|jsp|php|mysql)

JSF Gossip: 选择类标签(二)

选择类标签可以搭配<f:selectItem>或<f:selectItems>标签来设定选项,例如:
 <f:selectItem itemLabel="高中"
               itemValue="高中"
               itemDescription="学历"
               itemDisabled="true"/>
 

itemLabel属性设定显示在网页上的文字,itemValue设定发送至伺服端时的值,itemDescription 设定文字描述,它只作用于一些工具程序,对HTML没有什么影响,itemDisabled设定是否选项是否作用,这些属性也都可以使用JSF Expression Language来绑定至一个值。

<f:selectItem>也可以使用value来绑定一个传回javax.faces.model.SelectItem的方法,例如:
 <f:selectItem value="#{user.sex}"/>
 

则绑定的Bean上必须提供下面这个方法:
 ....
     public SelectItem getSex()  {
        return new SelectItem("男");
     }
 ....
 

如果要一次提供多个选项,则可以使用<f:selectItems>,它的value绑定至一个提供传回SelectItem?的数组、集合,或者是Map对象的方法,例如:
 <h:selectOneRadio value="#{user.education}">
     <f:selectItems value="#{user.educationItems}"/>
 </h:selectOneRadio><p>
 

这个例子中<f:selectItems>的value绑定至user.educationItems,其内容如下:
 ....
     private SelectItem[] educationItems;
   
    public SelectItem[] getEducationItems() {
        if(educationItems == null) {
            educationItems = new SelectItem[3];   
            educationItems[0] =
                  new SelectItem("高中", "高中");
            educationItems[1] =
                  new SelectItem("大学", "大学");
            educationItems[2] =
                  new SelectItem("研究所以上", "研究所以上");
        }
       
        return educationItems;
    }
 ....
 

在这个例子中,SelectItem的第一个建构参数用以设定value,而第二个参数用以设定label,SelectItem还提供有数个构造函数,记得可以引用一下线上API文件。

您也可以提供一个传回Map对象的方法,Map的key-value会分别作为选项的label-value,例如:
 <h:selectManyCheckbox layout="pageDirection"
                       value="#{user.preferColors}">
    <f:selectItems value="#{user.preferColorItems}"/>
 </h:selectManyCheckbox><p> 
 

您要提供下面的程序来搭配上面这个例子:
 ....
    private Map preferColorItems;
   
    public Map getPreferColorItems() {
        if(preferColorItems == null) {
            preferColorItems = new HashMap();
            preferColorItems.put("红", "Red");
            preferColorItems.put("黄", "Yellow");
            preferColorItems.put("蓝", "Blue");
        }
       
        return preferColorItems;
    }
 ....