JSF2.0
Facelets 界面组件模型
在JSF 2.0 中引入了全新的界面表现模型Facelets ,可以方便的实现自有组件定制和页面模版化 。
Facelets 是一个强大的轻量级声明语言。 Facelets 是用来建立 JSF 应用程序时的一个可供选择的表现层技术。 由于Facelets 采用W3C 的 XHTML 规范,是一个严格的xml 规范,组件树渲染不再需要如jsp 一样编译成class 文件后再运行,可以直接渲染,而大大提升了渲染速度 。
注解
@ManagedBean | 以托管 bean 的形式注册一个类实例,然后将其放入到使用其中一个 @...Scoped 注释指定的范围内。如果没有指定任何范围,JSF 将把此 bean 放入请求范围,如果没有指定任何名称,JSF 将把类名的第一个字母转换为小写,形成一个托管 bean 名称;例如,如果类名为 UserBean ,那么 JSF 将创建一个托管 bean ,其名为 userBean 。eager 和 name 属性都是可选的。 注释必须结合使用一个实现零参数构造器的 Java 类。 |
@ManagedProperty | 为托管 bean 设置一个属性。注释必须放在类成员变量的声明之前。name 属性指定特性的名称,默认情况下为成员变量的名称。value 属性是特性的值,可以是一个字符串,也可以是一个 JSF 表达式,比如 #{...} 。 |
@ApplicationScoped | 在应用程序范围内存储托管 bean 。 |
@SessionScoped | 在会话范围内存储托管 bean 。 |
@RequestScoped | 在请求范围内存储托管 bean 。 |
@ViewScoped | 在视图范围内存储托管 bean 。 |
@NoneScoped | 将托管 bean 指定为没有范围。无范围的托管 bean 在被其他 bean 引用时比较有用。 |
@CustomScoped | 在定制范围内存储托管 bean 。 定制范围就是指可以由页面创建者访问的地图。可以通过编程的方式控制定制范围内的 bean 的可视性和生命周期。value 属性指向一个地图。 |
资源重定位
1. 通过约定进行导航
可以利用 JSF 2 的导航约定:JSF 将 .xhtml 添加到按钮操作的末尾并加载该文件。
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="places"/>
2. 使用绝对路径的导航
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="/pages/places"/>
3. 通过重定向进行导航
默认情况下,JSF 将从一个 XHTML 页面转至另一个 XHTML 页面,但是通过指定 faces-redirect 参数可以重定向
<h:commandButton id="loginButton"
value="#{msgs.loginButtonText}"
action="places?faces-redirect=true "/>
利用资源处理程序
library 名称对应于 resources 目录下的子目录,这是保存资源的位置。例如,如果在 resources/css/en 目录中有一个样式表,那么 library 将为 css/en 。name 属性是资源本身的名称。
<h:outputStylesheet library="css" name="styles.css" target="body"/>
<h:outputScript library="javascript" name="util.js" target="head"/>
使用 JSF 表达式语言访问资源
<h:graphicImage value="#{resource['images:cloudy.gif']}"/> |
|
|
在 EL 表达式内访问资源的语法是 resource['LIBRARY :NAME '] ,其中 LIBRARY 和 NAME 对应于 <h:outputScript> 和 <h:outputStylesheet> 标记的 library 和 name 属性
无可否认,清单 13 中的语法不是很直观。它访问了一个 JSF 为了存储资源而创建的地图,因此很少需要使用这种语法。实际上,可以使用 <h:graphicImage/> 访问图像,而不需要使用 EL ,比如:<h:graphicImage library="images" name="cloudy.gif"/>
模板及复合组件
http://www.ibm.com/developerworks/cn/java/j-jsf2fu2/index.html
事件处理、 JavaScript 和 Ajax
http://www.ibm.com/developerworks/cn/java/j-jsf2fu3/index.html
事件:不加 on 例如:焦点离开的事件为 blur 。执行和更新多个标签是用空格,而不是用逗号。
AJAX
JSF2.0 开始对 Ajax 提供完全的支持。缺省的实现提供了一个 JavaScript 的资源,其资源标识符为 jsf.js 。 Ajax 需要该资源,并且该资源必须被放在 javax.faces 资源库中。导入到 <head> 标签中。
其他:
PROJECT_STAGE
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
EL
Java EE 6 servers or servlet 2.5 servers with JSF 2.0 JARs.
Anywhere in page Eg: #{customer.firstName}
Nested Properties Example
JSF EL Has Almost the Same Predefined Variables as JSP 2
#{header["User-Agent"]}