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>

