• 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中查找的功能。

  • 相关阅读:
    【NIO】IO与NIO的区别
    【在线工具】java开发常用在线工具
    【JVM】符号引用和直接引用
    【多线程】公平锁/非公平锁、乐观锁/悲观锁
    【Jenkins、sonar】
    开源软件记录
    Git Flow
    CF1324A Yet Another Tetris Problem 题解
    洛谷 P1199 三国游戏 题解
    CF33C Wonderful Randomized Sum 题解
  • 原文地址:https://www.cnblogs.com/netliang/p/4208429.html
Copyright © 2020-2023  润新知