JSF2允许使用Facelets作为页面模板,页面则由XHTML和CSS组成,这是一个很好的设计。
业务逻辑放在Backing Bean中,在Java EE 6中,EJB可以作为Backing Bean。
与普通Backing Bean不同的是,EJB具有事务特性和安全特性。
因此在Java EE 6中,典型的模型视图控制器设计模式中:Model是JPA实体、View是JSF2、Controller是EJB。
Contexts Dependency Injection (CDI)是Java EE 6中的一个新特性。
有了CDI,所有的POJOs类都可以作为Backing Bean依赖注入进来,包括EJB,真是非常好的一个特性。
1. 创建CDI配置文件:beans.xml
2. 为CustomerSessionBean加上标注:@javax.inject.Named
加上该标注后,CustomerSessionBean就可以在Expression Language中引用。
3. 为项目增加JSF2特性
右键项目,选择属性,选择框架,增加JavaServer Faces。
完成后会生成web.xml(其中注册了Faces Servlet)和index.xhtml。
4. 创建Faceslet模板
右键项目,选择新建,选择JavaServer Faces,选择Facelets模板:
模板文件一般放在WEB-INF目录下:
完成后,template.xhtml内容如下:
可以看出,template.xhtml使用了ui:insert 定义了name="top"、name="content"、name="bottom"三个部分。
5. 创建JSF页面,继承Faceslet模板
右键项目,选择新建,选择JavaServer Faces,选择Facelets模板客户端
完成后,index.xhtml内容如下:
可以看出,index.xhtml使用了ui:define重新定义了name="content"部分。
6. 运行index.xhtml页面
业务逻辑放在Backing Bean中,在Java EE 6中,EJB可以作为Backing Bean。
与普通Backing Bean不同的是,EJB具有事务特性和安全特性。
因此在Java EE 6中,典型的模型视图控制器设计模式中:Model是JPA实体、View是JSF2、Controller是EJB。
Contexts Dependency Injection (CDI)是Java EE 6中的一个新特性。
有了CDI,所有的POJOs类都可以作为Backing Bean依赖注入进来,包括EJB,真是非常好的一个特性。
1. 创建CDI配置文件:beans.xml
2. 为CustomerSessionBean加上标注:@javax.inject.Named
加上该标注后,CustomerSessionBean就可以在Expression Language中引用。
3. 为项目增加JSF2特性
右键项目,选择属性,选择框架,增加JavaServer Faces。
完成后会生成web.xml(其中注册了Faces Servlet)和index.xhtml。
4. 创建Faceslet模板
右键项目,选择新建,选择JavaServer Faces,选择Facelets模板:
模板文件一般放在WEB-INF目录下:
完成后,template.xhtml内容如下:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href="./../resources/css/default.css" rel="stylesheet" type="text/css" /> <link href="./../resources/css/cssLayout.css" rel="stylesheet" type="text/css" /> <title>Facelets Template</title> </h:head> <h:body> <div id="top"> <ui:insert name="top"><h1>Java EE 6 Sample App</h1></ui:insert> </div> <div id="content" class="center_content"> <ui:insert name="content">Content</ui:insert> </div> <div id="bottom"> <ui:insert name="bottom"><center>Powered by GlassFish!</center></ui:insert> </div> </h:body> </html>
可以看出,template.xhtml使用了ui:insert 定义了name="top"、name="content"、name="bottom"三个部分。
5. 创建JSF页面,继承Faceslet模板
右键项目,选择新建,选择JavaServer Faces,选择Facelets模板客户端
完成后,index.xhtml内容如下:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"> <body> <ui:composition template="./WEB-INF/template.xhtml"> <ui:define name="content"> <h:dataTable value="#{customerSessionBean.customers}" var="c"> <f:facet name="header"> <h:outputText value="Customer Table" /> </f:facet> <h:column> <f:facet name="header">Customer Name</f:facet> #{c.name} </h:column> <h:column> <f:facet name="header">Customer ID</f:facet> #{c.customerId} </h:column> </h:dataTable> </ui:define> </ui:composition> </body> </html>
可以看出,index.xhtml使用了ui:define重新定义了name="content"部分。
6. 运行index.xhtml页面
没有评论:
发表评论