JSF标签的使用2

 

n  事件监听器是用于解决只影响用户界面的事件

Ø  特别地,在beans的form数据被加载和触发验证前被调用

•    用immediate=“true”指明这个行为不触发验证

Ø  在监听器调用后,会重新显示表单

•    不应用导航规则,不重定向页面

n  ActionListener

Ø  隶属于按钮、超链接和图形映射控件

Ø  自动提交对应表单

n  ValueChangeListener

Ø  隶属于单选框、组合框、列表框、复选框、文本框等控件

Ø  需要用onclick=“submit()”或onchange=“submit()”的方式提交表单

•    请在各种不同的浏览器上小心测试

 

 

                                                                      h:inputText

 

Ø  valueChangeListener. 当表单中的内容被改变,提交表单时就会触发方法

         触发形式为  onchange=“submit()“  并且附带有immediate 的标记值

Ø  onchange. 当value发生变化时,就运行JavaScript

Ø  immediate. 用于指定无需验证

Ø  required.   指出使用的时候必须提供一个value

 

 

h:commandButton (with value)

n  相当于HTML中的  <INPUT TYPE=“SUBMIT”…>

n  属性

Ø  value. 按钮的标签,通常是一个静态的字符串,也可以使用动态的变量

Ø  action.当表单提交时运行相应的方法,前提是所有的监听器已经作用完毕

Ø  actionListener. 当表单提交时运行该方法

         运行方法,然后再次显示表单,没有事务逻辑,返回值以及导航规则

Ø  immediate. 指定绕过setter方法和验证器

         通常用于actionListener

 

h:commandLink

n  相当于HTML中附带有JavaScript <A HREF=“… “>

Ø  当链接被点击时, JavaScript提交表单

Ø  在JSF中JavaScript被自行插入

n  属性

Ø  value. 链接文本,通常是一个静态的字符串,也可以使用动态的变量

Ø  action.当表单提交时运行相应的方法

Ø  actionListener.当表单提交时运行该监听方法

n  注意

Ø  必须写在<h:form>中

 

 

 

f:selectItems的value应该是java.faces.model.SelectItem的一个列表或数组

n  选项的两种主要构造方法

Ø  一种仅仅指定一个字符串              

     同字符串一样的value被页面显示同时传给set方法

Ø  另一种指定一个Java对象和一个字符串

     显示在页面上的是字符串,但提供给set方法的value是这个Java对象(这种参数的映射是被JSF自动执行)

       SelectItem[] listboxItems =

                        { new SelectItem(realValue1, "DisplayVal1"),

                          new SelectItem(realValue2, "DisplayVal2"),

                          ...

                        }

 

校验方式:

手工校验

Ø  使用bean的string类型属性

Ø  在setter方法或action控制器中做校验

Ø  返回null值时重显form

Ø  创建自定义的错误信息

n  隐式自动校验

Ø  使用int, double等bean属性,或添加required标识

Ø  如果有转换错误,则系统重显form

Ø  使用h:message显示特定字段的错误信息

n  显式自动校验

 

Ø  使用f:convertNumber, f:convertDateTime, f:validateLength, f:validateDoubleRange 或f:validateLongRange

Ø  如果失败系统重现页面,同样我们可以使用h:message

n  自定义校验器

Ø  创建以ValidatorException包装的FacesMessage,在faces-config.xml中注册,Validator覆盖validate

 

 

 在action控制器中做校验-手工校验

n  Setter方法接收字符串并转换 

Ø  使用try/catch语句

Ø  使用应用程序特定的逻辑

n  action控制器检查赋值

Ø  如果值正确

•       返回正常的结果

Ø  如果值丢失或非法 

•       在bean中储存错误信息

•       返回null

 

 

n  输入页面 

Ø  显示错误信息

•       默认的错误信息应该是一个空字符串 

•       如果错误信息中包含html tags, 在h:outputText中使用escape=”false”

 

使用escape,意味着不会过滤掉 “<“、 “>”等字符

 

 

构造自定义错误信息

1.       创建一个FacesMessage

2.       通过facesContext.addMessage将FacesMessage保存在全局消息列表中

3.       返回空重显输入页面

4.       使用h:messages或者h:message在输入页面显示错误消息

 

优点:

1.        程序员不需要自己去保存消息

2.        不需要写HTML代码或者使用escape=”false”

3.        符合标准JSF校验

缺点:

4.        对于错误信息的格式缺少控制

 

————————————

转换 vs. 校验

 

n  f:convertBlah和f:validateBlah都会校验输入格式,并且在输入不合法的情况下重显页面 

Ø  但f:convertBlah还会改变显示字段的格式

Ø  f:validateBlah只有对h:inputText有效

Ø  f:convertBlah对h:inputText和h:outputText都有效

n  例如

<h:inputText value="#{orderBean.discountCode}">

    <f:convertNumber maxFractionDigits="2" />

</h:inputText>

Ø  显示0.75或类似的数字(而不是0.749)

 

 

f:convertNumber

   – currencyCode, currencySymbol

   – groupingUsed

   – integerOnly

   – locale

   – max(min)FractionDigits

   – max(min)IntegerDigits

   – pattern (ala DecimalFormat)

   – type

      • number, currency, percentage

 

 

f:validateLength

   – minimum

   – maximum

f:validateLongRange

   – minimum

   – maximum

f:validateDoubleRange

   – minimum

   – maximum

f:convertDateTime

   – type

      • date, time, both

   – dateStyle, timeStyle

      • default, short, medium, long,full

   – pattern (ala SimpleDateFormat)

   – locale

   – timeZone

 

 

转换器和校验器属    

Converters

– Implement Converter

   interface

– getAsObject

         • Takes String; returns

           Object

– getAsString

         • Takes Object; returns

           String

– Conversion errors

         • Throw

           ConverterException with

           FacesMessage

– Register in faces-config.xml

         • converter, converter-id,

           converter-class

– Use converter attribute

         <h:inputText value="#{…}"  converter="someID"/>

 

<p>

<h:panelGrid id="controlPanel"

binding="#{helloBean.controlPanel}"

columns="20" border="1" cellspacing="0"/>

</p>

<h:commandButton id="redisplayCommand" type="submit"

value="Redisplay"

actionListener="#{helloBean.addControls}"/>

 

 

public void addControls(ActionEvent actionEvent)

{

Application application =FacesContext.getCurrentInstance().getApplication();

List children = controlPanel.getChildren();

children.clear();

for (int count = 0; count < numControls; count++)

{

HtmlOutputText output = (HtmlOutputText)application.

createComponent(HtmlOutputText.COMPONENT_TYPE);

output.setValue(" " + count + " ");

output.setStyle("color: blue");

children.add(output);

}

}

 

JSF 的#{}比EL还多了到托管bean中查找的功能。

原文地址:https://www.cnblogs.com/netliang/p/4208429.html