JSF selectManyListBox示例教程
JSF允许用户借助<h:selectManyListBox>标记为单个字段选择多个值,该标记对应于标准HTML中的select标记。
以下属性通常与selectManyListBox一起使用;
id:标识组件的唯一标识符。
accept:以逗号分隔的内容类型列表。
dir:指示文本的方向。
值是ltr(从左到右)和rtl(从右到左)。
Disabled:按钮或者元素的禁用状态。
hreflang:使用href属性指定的资源的语言。
rev:使用href属性指定的锚点的反向链接。
目标:要其中打开文档的框架的名称。
type:指定链接的类型。
onselect:在输入字段中选择的文本。
形状:圆形,正方形等区域的形状
让我们看一个通过在selectItem标记中插入多个值来为单个字段选择多个值的示例。
如下创建JSF页面" mobileselect.xhtml"。
mobileselect.xhtml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:f="https://java.sun.com/jsf/core" xmlns:h="https://java.sun.com/jsf/html"> <h:body> <h:form> <h:outputLabel>MobileNames:</h:outputLabel> <h:selectManyListbox value="#{mobile.mobname}"> <f:selectItem itemValue="Nokia" itemLabel="Nokia" <f:selectItem itemValue="Samsung" itemLabel="Samsung" <f:selectItem itemValue="Blackberry" itemLabel="Blackberry" <f:selectItem itemValue="Sony" itemLabel="Sony" <f:selectItem itemValue="Mi3" itemLabel="Mi3" </h:selectManyListbox> <br <br <h:commandButton value="Submit" action="details" <h:commandButton value="Reset" type="reset"></h:commandButton> </h:form> </h:body> </html>
其中我们通过itemValue和itemLabel通过selectItem标记为列表框插入多个值,并通过调用bean mobile.mobname设置当前选定的值,其中mobname是字符串数据类型的数组,用于保存多个值。
创建details.xhtml页面以显示所选值;
details.xhtml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:h="https://java.sun.com/jsf/html" xmlns:ui="https://java.sun.com/jsf/facelets"> <head> <title>Selected Values</title> </head> <h:body> Selected values are <hr <ui:repeat value="#{mobile.mobname}" var="mob"> #{mob} <br </ui:repeat> </h:body> </html>
<ui:repeat>标记用于遍历数组并打印多个值(如果用户选择了这些值)。
在getter和setter方法的帮助下,创建用于处理数组的" Mobile.java" bean来设置和检索值。
package com.theitroad.jsf.beans; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean(name = "mobile", eager = true) @SessionScoped public class Mobile { public String[] mobname; public String[] getMobname() { return mobname; } public void setMobname(String[] mobname) { this.mobname = mobname; } }
现在运行显示以下输出的应用程序。
现在,让我们看看如何通过调用构造函数来填充列表框的值并将其显示在JSF页面中,从而从Bean中填充多个值。
创建beanMobileObject.java
作为
package com.theitroad.jsf.beans; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean(name = "mo1") @SessionScoped public class MobileObject { private String mlabel; private String mvalue; private String[] mob; public MobileObject() { } public MobileObject(String mlabel, String mvalue) { this.mlabel = mlabel; this.mvalue = mvalue; } public String getMlabel() { return mlabel; } public void setMlabel(String mlabel) { this.mlabel = mlabel; } public String getMvalue() { return mvalue; } public void setMvalue(String mvalue) { this.mvalue = mvalue; } public String[] getMob() { return mob; } public void setMob(String[] mob) { this.mob = mob; } public MobileObject[] m1; public MobileObject[] getM1() { return m1; } public void setM1(MobileObject[] m1) { this.m1 = m1; } public MobileObject[] getMobValue() { m1 = new MobileObject[4]; m1[0] = new MobileObject("SonyErricson", "SonyErricson"); m1[1] = new MobileObject("NokiaN72", "NokiaN72"); m1[2] = new MobileObject("Xperia", "Xperia"); m1[3] = new MobileObject("MicromaxCanvas", "MicromaxCanvas"); return m1; } }
其中我们通过将值传递给它来调用mobileObject类的参数化构造函数。
创建JSF页面mobobject.xhtml
为;
mobobject.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:h="https://java.sun.com/jsf/html" xmlns:c="https://java.sun.com/jsf/core"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form> <h:outputLabel>Mobile Names:</h:outputLabel> <h:selectManyListbox value="#{mo1.mob}"> <c:selectItems value="#{mo1.mobValue}" var="m1" itemLabel="#{m1.mlabel}" itemValue="#{m1.mvalue}" </h:selectManyListbox> <br <br <h:commandButton value="Submit" action="det"></h:commandButton> <h:commandButton value="Reset" type="reset"></h:commandButton> </h:form> </h:body> </html>
在JSF页面中,我们使用mobValue变量,该变量从MobileObject类中获取值并在列表框中填充数据。
变量mlabel和mvalue用于获取标签和值。
创建JSF页面det.xhtml
为;
det.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:h="https://xmlns.jcp.org/jsf/html" xmlns:ui="https://java.sun.com/jsf/facelets"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <ui:repeat value="#{mo1.mob}" var="mob"> #{mob} <br </ui:repeat> <br </h:body> </html>
<ui:repeat>标记用于遍历对象并获取多个值。
现在运行产生以下输出的应用程序。
现在让我们看一下如何从将数据插入到映射中的bean填充数据。
创建bean" MobileMap.java"为;
package com.theitroad.jsf.beans; import java.util.LinkedHashMap; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean(name = "mobilemap") @SessionScoped public class MobileMap { private String[] mname; public String[] getMname() { return mname; } public void setMname(String[] mname) { this.mname = mname; } private static Map<String, Object> mobnames; static { mobnames = new LinkedHashMap<String, Object>(); mobnames.put("MotoE", "MotoE"); //label, value mobnames.put("GalaxyNote", "GalaxyNote"); mobnames.put("AppleIPhone", "AppleIPhone"); } public Map<String, Object> getMobnames() { return mobnames; } public static void setMobnames(Map<String, Object> mobnames) { MobileMap.mobnames = mobnames; } }
其中我们声明一个具有String和Object数据类型的LinkedHashMap,并使用地图的put方法并插入数据,并且在那里使用getter setters方法设置和检索值。
创建JSF页面mobmap.xhtml
为;
mobmap.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:h="https://java.sun.com/jsf/html" xmlns:c="https://java.sun.com/jsf/core"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:form> <h:outputLabel>Mobile Names:</h:outputLabel> <h:selectManyListbox value="#{mobilemap.mname}"> <c:selectItems value="#{mobilemap.mobnames}" </h:selectManyListbox> <br <br <h:commandButton value="Submit" action="mapdet"></h:commandButton> <h:commandButton value="Reset" type="reset"></h:commandButton> </h:form> </h:body> </html>
我们使用映射Mobnames将值检索到jsf页面中的列表框。
创建mapdet.xhtml
视图页面,以显示用户选择的值。
mapdet.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xmlns:h="https://xmlns.jcp.org/jsf/html" xmlns:ui="https://xmlns.jcp.org/jsf/facelets"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h3>Selected values are</h3> <ui:repeat value="#{mobilemap.mname}" var="m1"> #{m1} <br </ui:repeat> </h:body> </html>