使用JSF标记
基于Facelets技术的JSF页面是一个 XHTML页面,文件扩展名为 .xhtml
1)JSF页面可用html标记,但必须满足:
①所有标记都必须闭合。如<p>开始,</p>结束;不成对的<br/>
②所有的标记名和属性名都必须为小写
③所有的属性值都应用双引号或单引号括起来
2)JSF页面主要由JSF标记组成,也可包含一些JSTL(JSP Standard Tag Library)
标记 | 前缀 |
JSF HTML标记库 | h |
JSF 核心标记库 | f |
JSF Facelets标记库 | ui |
JSF 复合标记库 | composite |
JSTL 核心标记库 | c |
JSTL函数标记库 | fn |
JSF HTML标记库(h):代表某种UIComponnet组件与某个呈现器的一种组合
JSF 核心标记库(f):执行一些与任何特定的呈现包无关的核心动作
JSF Facelets标记库(ui):使用模板时需要的标记,模板封装了页面布局、样式和内容的单个模式,也可以在多个页面中重用这个模板,使页面有一致的外观。
3)JSF HTML标记库中标记的使用
对文本域组件标记 h:inputText
组件名:javax.faces.Input
呈现器型名:javax.faces.Text
①id的使用
UIViewRoot root=FacesContext.getCurrentInstance().getViewRoot();//获取组件树的根
UIComponent component=root.findComponent("form1:input1");//返回指定客户端标识符的组件对象
form1为h:form的id;input1来自h:inputText的id。
②immediate(处理时期)
输入类组件和动作组件通常可以设置immediate,默认为false。
false:数据(输入)在“处理验证”时被转换和验证;动作事件会在“调用应用”阶段处理。
true:数据的转换、验证以及事件处理会在“应用请求值”立即进行。
备注:请求处理生命周期有 恢复视图、应用请求值(提交动作)、处理验证、更新模型值。调用应用(监听器)、呈现响应。
③rendered(呈现)
通常为一个boolean型EL表达式,JSF框架由rendered值决定组件是否被呈现
如:rendered="#{showReply.page[0] gt 2}"
又如:rendered="#{i==showReply.currentPage}"
④style和styleClass:
为组件的呈现输出指定CSS样式
style:指定CSS样式并作为呈现产生的HTML标记的style属性值;
如:style="margin-left:5px; margin-right:5px"
styleClass:指定CSS样式类并作为呈现产生的HTML标记的class属性值
如:styleClass="font3" 其中font3在CSS文件中为样式类。
⑤value
用于设置组件值。可以为普通的字符串文本,但常为 EL值表达式,使组件值与受管Bean的某个属性绑在一起
如 value="回复主题" 或:value="#{showReply.replys}"
⑥binding(将组件绑定至UIComponent)
如:<h:selectOneMenu id="selectMaterLog" value="..." ...binding="#{Masterlogs.logSelectField}">....</h:selectOneMenu>
binding属性是将h:selectOneMenu这个控件赋值给名称为Masterlogs的JavaBean的logSelectField属性,从而能够在Masterlogs这个JavaBean的方法中获取或者操作h:selectOneMenu这个控件的值
EL值表达式的类型必须与标记代表的组件类型相容
⑦title为该组件呈现产生的标记元素指定标题信息。Web浏览器通常会将该信息以即时提示的方式显示出来。
4)基本输入类标记
①标记功能
-h:inputText 文本域,用于接收一行文本
-h:inputSecret 口令域,用于接收一行不含空格的文本,输入时显示“ * ”;
-h:inputTextArea 文本区,用于接收多行文本
-h:inputHidden 隐藏域,允许在表单中隐藏一个数据,以便在表单提交时,该数据能送回带给服务器。
②常用 属性
-size 文本域或口领域的宽度(列数)
-maxlength 文本域或口领域最多可以输入的字符数
-cols、rows 文本区的宽度(列数)和高度(行数)
-disabled 是否禁用(隐藏域除外)。也适用于选择等输入标记、以及动作标记等。
-label 在错误消息中使用的组件名称(隐藏域除外)
-accesskey 指定访问键(隐藏域除外)。ALT+访问键激活当前组件也适用于选择等输入标记、以及动作标记和h:outputLabel
当h:outputLabel指定访问键,用于按下时,将激活与该标签相关联的组件,如焦点文本域、选中复选框。
-readonly 是否只读(隐藏域除外),也适用于选择等输出标记
-redisplay 指定在呈现是否包含组件值,仅适用于口领域标记。默认为false。
-required 指定用户是否必须输入,默认为true。
-requiredMessage 用户没有填必填时提示的错误消息
-validator 指定一个方法表达式,引用受管bean的一个方法,该方法称为验证方法。一般在“处理验证”阶段被调用。
如: validator="#{inputTopic.validator}"
-validatorMessage 指定验证错误信息,将代替由任何验证器产生的错误信息,在验证出错时显示。
如:validatorMessage="长度不能超出1000个字符"
5)基本输出标记
①标记功能
-h:outputText 显示由value指定的文本,需要时可用style和 styleClass指定显示格式
-h:outputLabel 显示一串文本作为输入组件的标签,由for指定相关的输入组件。单击标签时会聚焦相关输入组件
如<h:outputLabel for="input1" value="标题"/>
-h:outputFormat 显示参数化文本,value:称为消息模板的特殊字符串;{ }中的数字 代表 一个参数,参数值由嵌套于该标记的核心标记f:param的value指定
如<h:outputFormat value="{0}今年{1}岁,{0}是一名学生。"/>
<f:param value="LiMing"/> <f:param value="19"/> </h:outputFormat>
-h:outputLink 呈现一个HTML超链接,单击链接产生请求。value指定目标连接的URL,可为相对URL或者绝对URL。
若以斜杠(/)开头,则相对web容器目录;
若不以(/)开头,则相对于当前页面所在路径。
如<h:outputLink value="/web/faces/resp.xhtml"/>中间内容为超链接文本,可以使用其他标记如h:outputText或h:graphicImage等</h:outputLink>
②常用属性
-escape 是否对特殊字符(如<、>、&)进行转义处理,默认为true。如 <转义< >转义> &转义&
若为false,则被浏览器解释,用于outputText、outputLabel、outputFormat
-target 指定目标资源打开的位置;默认为当前窗口。设为"_brank"则在新窗口打开。也可以指定名称,在指定的窗口或者标签打开。
用于h:outputlLink、h:form、h:commandLink 和 h:Link标记。
6)图像标记
-h:graphicImage 显示一幅图像,属性url指定图像URL;可用width和height设置高度和宽度。
7)动作类标记
①标记功能
-h:commandButton 动作按钮
type 按钮类型,默认为submit,产生提交按钮,单击产生postback请求、引发动作事件;如果为reset,不产生HTTP请求,重写状态。
value 按钮的标题
image 图片按钮,设置一个图像的url,为提交按钮。则type和value被忽略。
-h:commandLink 与h:outputLink相比,它也产生一个超链接,即<a>元素,能嵌套outputText和graphicImage指定超链接的文本或图像,也可用value指定超链接文本。
②常用属性
-action 动作方法。 public String<方法名>() public Object<方法名>
-actionListener 动作监听方法。 public void<方法名>(Action Event) public void <方法名>()
-target 指定响应内容显示的位置。但是h:commandButton没有这个属性,不过可以在h:form中设置。
8)二选一标记(我比较喜欢叫它“选不选标记”)
-h:selectBooleanCheckbox 显示一个复选框。value通常绑定到受管bean的一个布尔型属性上。
如<h:selectBooleanCheckbox id="bc" value="#{index.accpet}"/>
<h:outputLabel for="bc" value="接受条款?"/>
9)单选类标记
①标记功能
-h:selectOneRadio 单选按钮组,单击按钮图标或者标签进行选择
-h:selectOneListbox 单选列表框。size显示选项数(单击滚动条或下拉按钮显示其它选项)。若不指定size,其它选项则并排同时显示。
-h:selectOneMenu 单选菜单(下拉菜单)。无size属性。一次仅显示一个选择。(单击下拉按钮可显示所有选项)
②常用属性
-border 边框,适用于selectOneRadio和selectManyCheckbox
-hideNoselectionOption 当组件被用户激活时,非选择项是否被隐藏。适用于所有选择类标记。
-layout lineDirection(默认线型横向) pageDirection(竖型)。适用于selectOneRadio和selectManyCheckbox
③选项设置
无论单选、多选标记,其选项都由f:selectItem或/和 f:selectItems字标签提供。如:
性别
<h:selectOneRadio value="#{index.gender}">
<f:selectItem itemLabel="男" itemValue="male"/>
<f:selectItem itemLabel="女" itemValue="female"/>
</h:selectOneRadio>
④f:selectItem 指定单个选项,属性有:
-itemLabel 显示的文字(String)
-itemValue 选项值,作为请求参数送往服务器(Object)
-itemDisable 选项是否被禁用(Boolean)
-noSelectionOption 是否为专门的“非选择项”,缺省值为false
-value 组件值(值表达式),指向一个SelectItem实例。
⑤f:selectItems 标记指定一组选项
标记的value必须是指向下面对象之一的值表达式:
-单个SelectItem实例
-SelectItem实例集合
-SelectItem实例数组
-一个映射,其条目的键和值分别代表选项的标签和值。
10)多选类标记
①标记功能
可以选择多个,组件值通常为数组
-h:selectManyCheckbox 复选框组
-h:selectManyListbox 多选列表框,size指定显示的选项数。按住ctrl再单击选择(或取消选择)其余各项。按shift再单击可选连续多项。
-h:selectManyMenu 多选菜单。无size,每次仅显示一项,可选多项
②常用属性
-collectionType 多选组件的value应为数组或集合(Collection)。如果value把绑定在受管bean的某个集合类型属性上,而该集合类型是接口或抽象类(如List、Set等),那么可以用该collectionType属性指定一个相应的具体类型。
-selectedClass、unselectedClass 指定CSS样式类,分别应用于已选与未选的选项显示。仅适用于h:selectManyCheckbox。
11)消息标记
JSF在处理请求的可能产生各种消息,包括:
1.标准转换器或自定义转换器在转换组件值类型时产生的错误信息
2.设置了required的组件未获得输入值时产生的错误信息
3.在1.中两种转换器在验证组件值时产生的错误信息
4.由应用代码根据需要自主产生的各种消息
①FacesMessage类
每个消息包含三个属性:概要文本(summary)、详细文本(detail)和严重级别(severity)。用FacesMessage实例表示:
public FacesMessage(){ }无参。一个、两个、三个参数的构造函数(省略不写)。
严重级别(severity)有4种
-FacesMessage.SEVERITY_INFO 信息级别
-FacesMessage.SEVERITY_WARN 警告级别
-FacesMessage.SEVERITY_ERROR 错误级别
-FacesMessage.SEVERITY_FATAL 致命级别
FacesContext对象的addMessage方法用于将消息放入队列:
public void abstract addMessage(String clientId,FacesMessage message)
②h:message标记
消息标记,用于显示组件信息 for属性指定组件id。
③h:messges标记
消息组标记,用于显示全局消息和组件消息。