`
kobexing933
  • 浏览: 120403 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Seam 的一些必备知识

阅读更多

Seam 的一些必备知识

Seam框架本身基于JSF和EJB3.0,所以JSF和EJB3是必须要了解的内容,为了更好的使用JSF还需要了解Facelets(JSF和JSP相关)。

JSF的教程可以参考Sang Shinsang.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>

分享到:
评论

相关推荐

    seam一些基本功能的实现方法

    在“seam一些基本功能的实现方法”中,我们将探讨Seam的关键特性以及如何在实践中应用它们。 首先,Seam提供了组件模型,允许开发者将应用拆分为小而独立的部分,每个部分都称为一个Seam组件。这些组件可以很容易地...

    整合了seam的一些资源

    2. `examples`或`samples`:可能包含了一些示例项目,帮助开发者了解如何使用Seam框架构建实际应用。 3. `docs`或`documentation`:可能包含了Seam的官方文档,包括用户指南、API参考等,对于学习和理解Seam的功能和...

    为Seam做好准备

    8. **Seam工具**:Seam提供了一些工具,如Seam Gen,可以帮助快速生成项目结构和基础代码,学习如何使用这些工具能加速开发进程。 9. **Seam事件和上下文**:Seam引入了一种独特的事件模型和组件上下文,使得组件间...

    Seam框架文档简述

    ### Seam框架核心知识点详解 #### 一、Seam框架简介 Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分...

    jboss seam 学习资料,seam in action和官方手册

    书中的内容涵盖了以下关键知识点: 1. **Seam架构**:理解Seam如何将组件、事件和依赖注入结合在一起,提供统一的编程模型。 2. **JSF集成**:学习如何利用Seam增强JSF,实现更强大的用户界面交互。 3. **EJB 3.0...

    JBOSS SEAM组件中文手册

    结合实际项目实践,将理论知识与实践相结合,可以更好地掌握Seam的精髓。 总的来说,JBoss Seam是一个强大且全面的Java EE开发框架,其设计理念是简化复杂性,提高开发效率。通过深入理解和熟练使用Seam,开发者...

    seam_carving 代码实现 seam

    **Seam Carving 技术详解** Seam Carving,又称图像拉链,是一种基于能量最小化的图像调整方法,主要用于图像大小的动态调整,而不仅仅是简单的等比例缩放。它能够在保持图像主要结构不变的情况下,根据需要增加或...

    seam_in_action

    《Seam in Action》这本书系统地介绍了 Seam 框架的基础知识和高级特性,适合想要深入了解 Seam 框架的开发者阅读。通过对本书的学习,开发者可以掌握如何利用 Seam 快速构建高性能的企业级 Web 应用程序。此外,...

    seam参考手册中文版

    ### Seam参考手册中文版知识点概览 #### 一、Seam简介及基本概念 ##### JBoss Seam概述 - **Seam**是JBoss家族中的一员,它是一个建立于Java EE平台之上的开源框架,旨在简化企业级应用的开发过程。 - **版本**: ...

    Jboss Seam中文版

    ### JBoss Seam中文版知识点详解 #### JBoss Seam简介 JBoss Seam是一个强大的企业级应用开发框架,基于Java EE标准,特别强调简化Web应用的开发流程。它通过整合多种技术如JSF、EJB 3.0等,提供了一种更为高效、...

    SEAM 中文开发指南

    ### SEAM 中文开发指南知识点概述 #### 一、SEAM 框架简介 - **SEAM**:SEAM 是一个基于 Java EE 的企业级应用框架,它简化了复杂的应用程序开发过程,并且提供了丰富的功能来支持业务逻辑的实现。 - **版本信息**...

    Seam security

    Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...

    seam in action 中文 english

    《Seam in Action》是一本专门探讨Seam框架的书籍,该书分为中文和英文两个版本,对于初学者和有经验的开发者来说都是一个宝贵的资源。Seam是一个强大的Java EE框架,它集成了多种技术,如JavaServer Faces (JSF)、...

    MATLAB_Seam_Carving_seamcarving_

    这些文件通常会定义一些关键函数,如计算能量图、查找seam、执行缩放操作等。通过阅读和理解这些代码,你可以深入学习seam carving的工作机制,并可以进一步修改和优化代码,适应不同的图像处理需求。 总的来说,...

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    Jboss seam3 实战

    从部分内容来看,文章可能由名为JeffreyJia的作者撰写,提到了一些JBoss Seam3的关键概念和相关技术,同时也提到了构建工具Maven,以及Weld,这是Java EE 6中的CDI(Contexts and Dependency Injection)规范的参考...

    Seam Carving的C++实现代码

    而`no.txt`可能是项目的一些说明或者注意事项,例如编译和运行的指令等。 为了运行这段代码,你需要一个支持OpenCV的开发环境,如Visual Studio或Code::Blocks,并确保已正确配置OpenCV库。加载测试图像,编译并...

    seam2 in tomcat lib

    然而,尽管Seam最初是为JBoss应用服务器设计的,但通过一些额外的配置,它也可以在轻量级的Tomcat服务器上运行,无需依赖完整的EJB容器。在“seam2 in tomcat lib”这个主题中,我们将探讨如何在不使用EJB的情况下,...

    seam的注解和标签

    Seam是一个Java EE框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Inversion of Control(IoC)和Enterprise JavaBeans(EJB)等技术融合在一起,为开发复杂的Web应用程序提供了便利。在Seam框架...

Global site tag (gtag.js) - Google Analytics