Seam 的一些必备知识
Seam框架本身基于JSF和EJB3.0,所以JSF和EJB3是必须要了解的内容,为了更好的使用JSF还需要了解Facelets(JSF和JSP相关)。
JSF的教程可以参考Sang Shin(sang.shin@sun.com)的J2EE的教程
http://www.javapassion.com/j2ee/
EJB3 和 JPA 还可以参考这个教程:
http://www.javapassion.com/j2ee/
上面两个教程唯一的缺点是:是英文写的;但是也是优点,很原汁原味,不过过分偏重了Sun(个人观点)。
Facelets可以参考ibm上面的文章:《Facelets 非常和是 JSF》
http://www.ibm.com/developerworks/cn/java/j-facelets/
开发工具,我喜欢使用IDEA,部署和构建依赖Ant,现在还没有研究Maven怎么使用Seam。
但是最好Maven能支持Seam,做一个Seam Starter的Maven插件,像Struts2 的插件那样好用。
Facelets
Facelets配置
我们这里主要讲如何让使用Facelets功能的应用程序在JBoss-4.2.2GA中运行。
Facelets的版本为1.1.14
目录结构:
facelets-number-guess
│ guess.xhtml
│ index.jsp
│ response.xhtml
│ template.xhtml
│
└─WEB-INF
│ faces-config.xml
│ web.xml
│
├─classes
│ └─tutorial
│ NumberBean.class
│
└─lib
jsf-facelets.jar
lib库中的文件都是从C:/Seam/facelets-1.1.13/lib目录中拷贝而来的,这里需要注意一点,当如下文件:
el-api-1.0.jar
el-impl-1.0.jar
jsf-api-1.2_04-p02.jar
servlet-api-2.4.jar
在WEB-INF/lib目录下时在JBoss下无法正常运行,原因是JBoss已经提供了这些API的类库,一旦重复发现,JBoss无法加载这些类库而出错。
web.xml的内容为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- Use Documents Saved as *.xhtml -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<!-- Special Debug Output for Development -->
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<!-- Optional JSF-RI Parameters to Help Debug -->
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>true</param-value>
</context-param>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
上述黑体部分的内容为facelets的配置,稍后说明用途。
faces-config.xml的内容为:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<application>
<view-handler>
com.sun.facelets.FaceletViewHandler
</view-handler>
</application>
<!-- our NumberBean we just created -->
<managed-bean>
<managed-bean-name>NumberBean</managed-bean-name>
<managed-bean-class>tutorial.NumberBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>min</property-name>
<value>1</value>
</managed-property>
<managed-property>
<property-name>max</property-name>
<value>10</value>
</managed-property>
</managed-bean>
<!-- going from guess.xhtml to response.xhtml -->
<navigation-rule>
<from-view-id>/guess.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/response.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<!-- going from response.xhtml to guess.xhtml -->
<navigation-rule>
<from-view-id>/response.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/guess.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
上述黑体部分的内容为facelets的配置,上述两部分的配置内容结合在一起,可以得出如下结论:
单用户向服务器请求*.jsf的内容的时候,会被Facelets框架解释为对*.xhtml的处理,这是在这个解释的过程中完成了Facelets的功能。
Facelets的模板功能
Facelets的一个简单的功能是类似Tile的模板的功能,例如,我们有两个页面guess.xhtml和response.xhtml,我们需要使用共同的布局,那么我们可以设置一个共同的框架模板template.xhtml文件。
说明:xhtml文件为html文件的子集,必须满足xml的规范,是一个合式的xml文件
template.xhtml文件的内容为:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Facelets: Number Guess Tutorial</title>
<style type="text/css">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: small;
}
-->
</style>
</head>
<body>
<h1>
<ui:insert name="title">Default Title</ui:insert>
</h1>
<p>
<ui:insert name="body">Default Body</ui:insert>
</p>
</body>
</html>
其中内容的一些说明:
引入了facelets模板标签
定义了占位符,之后可以使用动态的内容替换。
guess.xhtml文件的内容
<!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">
<body>
This text above will not be displayed.
<ui:composition template="/template.xhtml">
This text will not be displayed.
<ui:define name="title">
I'm thinking of a number from #{NumberBean.min} to #{NumberBean.max}. Can you guess it?
</ui:define>
This text will also not be displayed.
<ui:define name="body">
<h:form id="helloForm">
<h:inputText type="text" id="userNo" value="#{NumberBean.guess}" validator="#{NumberBean.validate}"/>
<br/>
<h:commandButton type="submit" id="submit" action="success" value="Submit"/>
<br/>
<h:message showSummary="true" showDetail="false" style="color: red; font-weight: bold;" id="errors1"
for="userNo"/>
</h:form>
</ui:define>
This text will not be displayed.
</ui:composition>
This text below will also not be displayed.
</body>
</html>
上 述的内容相信大家会很容易理解,xmlns部分引入了Facelets标签合JSF的h类型的标签,<ui:define name="title"> ...部分和<ui:define name="body">...两部分定义了模板中的动态部分。
另外需要注意的是,黑体部分的内容不会作为输出。
response.xhtml文件内容:
<!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">
<body>
<ui:composition template="/template.xhtml">
<ui:define name="title">
#{NumberBean.message}
</ui:define>
<ui:define name="body">
<form jsfc="h:form">
<input jsfc="h:commandButton" type="submit" id="back" value="Back" action="success"/>
</form>
</ui:define>
</ui:composition>
</body>
</html>
Facelets对模板的支持
Facelets可以使用HTML格式的标签处理JSF标签,这样可以方便设计人员的设计,例如可以使用Dreamwaver等工具设计,而在实行的时候按照JSF标签的方式自动的处理数据绑定和事件绑定。
例如上述response.xhtml中的标签内容:
<form jsfc="h:form">
<input jsfc="h:commandButton" type="submit" id="back" value="Back" action="success"/>
</form>
上述代码在执行的时候会被翻译为如下的代码:
<h:from>
<h:commandButton type="submit" id="back" value="Back" action="success"/>
</h:from>
在上述的过程中jsfc属性起到了标志的作用。
另外使用facelets还支持部分的JSTL的标签,虽然并不全面,但是解决了JSF中标签欠缺的问题,Facelets支持的标签为:
<c:if/>
<c:forEach/>
<c:catch/>
<c:set/>
其中forEach标签解决了JSF中没有真正的循环标签的问题(dataTable不算是真正的循环标签);
Facelets支持表达式语言(EL)
例如:
<span>Your Basket has ${basket.lineCount} Items</span>
转自:http://www.dojochina.com/?q=node/723
转载于:https://www.cnblogs.com/lanzhi/archive/2008/09/07/6470070.html
Seam 的一些必备知识相关推荐
- 一些解密必备知识(2)- 基础篇03|解密系列
一些解密必备知识(2)- 基础篇03 让编程改变世界 Change the world by program 软件安全是信息安全领域的重要内容,本系列视频教程将涉及到软件相关的加密.解密.逆向分析 ...
- 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
前言 第一部分参见 产品经理必备知识之网页设计系列(一)-创建出色用户体验 https://blog.csdn.net/wenyusuran/article/details/108199875 第二部 ...
- 产品经理必备知识之网页设计系列(二)-如何设计出一个优秀的界面
前言 第一部分参见 产品经理必备知识之网页设计系列(一)-创建出色用户体验 https://blog.csdn.net/wenyusuran/article/details/108199875 第三部 ...
- 产品经理必备知识之网页设计系列(一)-创建出色用户体验
前言 设计师和开发人员在构建网站时,需要考虑很多事情,从视觉外观到功能设计. 本文将重点介绍创建出色用户体验的主要原则.方法和具有启发性的案例:从用户体验地图等整体结构开始,到单个页面的设计:还将介绍 ...
- Interview:人工智能岗位面试—人工智能岗位求职之机器学习算法工程师必备知识框架结构图
Interview:人工智能岗位面试-人工智能岗位求职之机器学习算法工程师必备知识框架结构图 目录 机器学习算法工程师思维导图 机器学习算法工程师思维导图 后期继续更新-- 1.思维导图01
- 玩转Linux必备知识(四)
硬盘管理系统 玩转Linux必备知识(三) 玩转Linux必备知识(二) 玩转Linux必备知识(一) 硬盘管理背景知识 硬盘常见接口: IDE 最古老的硬盘接口,淘汰品 SATA 串行接口,个人电脑 ...
- 玩转Linux必备知识(三)
玩转Linux必备知识(一) 玩转Linux必备知识(二) 用户管理系统 用户管理基础 who 查看系统中当前登录的所有用户 who am i 查看当前登录用户 终端: :0 代表后台终端,与人没有交 ...
- 玩转Linux必备知识(二)
常用命令清单2 玩转Linux必备知识(一)–常用命令清单1 echo命令 将命令后跟随的内容在屏幕上输出一次 $ 表示取值 echo $PATH 将变量PATH中的值在屏幕上显示一次 系统变量存放在 ...
- 移动web开发(一)——移动web开发必备知识
参考: 移动终端开发必备知识.http://isux.tencent.com/mobile-development-essential-knowledge.html
最新文章
- shell脚本之 if,case,for的用法
- 封装fetch的使用(包含超时处理)
- 开源纯C#工控网关+组态软件(七)数据采集与归档
- html5 canvas获取坐标,HTML5 canvas坐标
- 并行计算——基础并行计算
- 【Elasticsearch】Elasticsearch 中增加分片数量,聚合一定会变快吗?
- python 读取邮件内容_Python 如何提取邮件内容
- windows10录制视频 电脑屏幕录像
- matlab批量处理图片压缩
- 一般纳税人税额计算_一般纳税人应纳税额如何计算?
- OTL/OCL/BTL/甲类/乙类/甲乙类
- 计算机视觉 相机标定
- PDF to EPUB Converter Mac(PDF转EPUB转换器)
- Win8.1 取消开机密码
- 科技英语文献阅读整理
- Java中的元空间(Metaspace)
- 往证书图片上填充文字内容
- 跟随大咖修炼运营圈求生欲:从案例中学习,进阶高级运营
- iMusic Player
- 什么是危机公关与舆情监测?
热门文章
- tapable 创建钩子
- php 复选框 未选,php – 在表单发布时如何获取复选框元素中未选中复选框的值?...
- 中怎么构建ebug模式_Mybatis的设计模式运用
- 2015年计算机维修记录表,2015年 主题教学记录表.doc
- Ubuntu 安装 Apache Airflow
- mysql中毫秒的保存类型
- [转]VB中资源文件.res的使用方法详解
- 拖动无边框窗体(VB6代码)
- ubuntu安装rpm的方法
- OSI网络结构的七层模型与TCP/IP层次模型