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

最新文章

  1. wordpress电子商务插件和主题的使用方法
  2. 在dede:arclist、dede:list等标签中调用附加字段
  3. html5开发制作,漂亮html5模板欣赏,H5网站建设
  4. java实现excel与mysql的导入导出
  5. iOS App 百思不得姐
  6. jquery之each
  7. ADO.NET连接数据库的两种方式
  8. C/S和B/S两种软件体系结构
  9. DTO学习系列之AutoMapper(四)
  10. Extjs视频
  11. python-networkx学习(1)
  12. Tomcat8远程访问manager,host-manager被拒绝403
  13. GridView中添加行单击事件.md
  14. Android反编译 -- 错误代码还原
  15. 4月23日 MySQL学习-DDL
  16. Bootstrap -- 网格系统、排版样式类、 &lt;blockquote&gt;、 &lt;abbr&gt; 元素
  17. Codeforces Round #495 (Div. 2) D. Sonya and Matrix
  18. Python调用7zip命令实现文件批量解压
  19. java并发:AQS的简单理解
  20. J - Borg Maze +getchar 的使用注意(二维字符数组的输入)

热门文章

  1. undefined method `environment&#39; for nil:NilClass when importing Bootstrap into rails
  2. 【荐2】Total Commander 7.57 配置选项 个性化设置备份,,,开启时如何自动最大化???(二)
  3. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
  4. H5案例分享:使用JS判断客户端、浏览器、操作系统类型
  5. 02第一个OC程序
  6. mapReduce编程之auto complete
  7. linux c 笔记-2 Hello World &amp; main函数
  8. ASP.NET正则表达式(URL,Email)
  9. W7无法更新
  10. JQ图片轮播