`
yingfang05
  • 浏览: 119541 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Seam配置和Seam应用程序打包之一

    博客分类:
  • jsf
阅读更多
Seam基本配置
首先,让我们看看每当将Seam和JSF一起使用时所需要的基本配置。

将Seam与JSF和servlet容器集成
当然,你需要一个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>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.seam</url-pattern>
</servlet-mapping>
(你可以调整URL模式以适合你的需要。)

另外,Seam需要在你的 web.xml 文件中有以下项:

<listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
这个listener负责引导Seam,以及销毁会话和应用程序。

有些JSF实现在服务器端状态保持方面实现得很差,它们会与Seam的对话传播发生冲突。 如果你在表单提交时遇到了对话传播的问题,就尝试着切换到客户端状态保持。在你的 web.xml 中需要有这些:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

使用Facelets
如果你愿意听从我们的建议,使用Facelets代替JSP,就需要在 faces-config.xml 中增加以下几行:

<application>
    <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
并将以下几行加到 web.xml 中:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

Seam Resource Servlet
Seam Resource Servlet提供资源,这些资源被Seam Remoting、captchas和一些JSF UI控件所使用。 配置Seam Resource Servlet时,需要在 web.xml 中有以下项:

<servlet>
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Seam Resource Servlet</servlet-name>
<url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>

Seam Servlet过滤器
Seam的基本操作不需要任何Servlet过滤器。可是,有些功能依赖于过滤器的使用。 为了让一切对你来说更容易,Seam让你可以增加和配置Servlet过滤器,就像你配置其他内建Seam组件一样。 为了利用这个特性,我们必须首先在 web.xml 中装载一个主过滤器:

<filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>Seam Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Seam主过滤器 必须 是在 web.xml 中指定的第一个过滤器。这样就能保证它首先运行。

为了取消内建的过滤器,你可以在一个特定的过滤器中设置 disabled="true"

增加主过滤器使得以下内建过滤器可用。

异常处理
这个过滤器在 pages.xml 中提供异常映射功能(几乎所有的应用程序都需要这个)。 当未捕获的异常发生时,它也负责回滚未提交的事务。 (根据Java EE规范,Web容器应该能自动做到这一点,但我们发现在所有应用程序服务器中,都不支持这一行为。 当然在普通Servlet引擎如Tomcat中,它并不是必需的。)

默认情况下,异常处理过滤器将处理所有请求,但是这种行为可以通过增加一个 <web:exception-filter> 项到 components.xml 文件来进行调整,如下面的例子所示:

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:web="http://jboss.com/products/seam/web">

    <web:exception-filter url-pattern="*.seam"/>

</components>
url-pattern — 被用来指定过滤哪些请求,默认是所有请求。

通过重定向传播对话
这个过滤器允许Seam通过浏览器重定向来传播对话上下文。 它拦截任何浏览器重定向,并增加一个指定Seam对话标识符的请求参数。

默认情况下,重定向过滤器将处理所有的请求,但这个行为也可以在 components.xml 文件中进行调整:

<web:redirect-filter url-pattern="*.seam"/>
url-pattern — 被用来指定过滤哪些请求,默认是所有请求。

多重表单提交
当使用Seam文件上传JSF控件时,这个特性很有必要。它依据多重表单/数据规范(RFC-2388)检测并处理多重表单请求。 要覆盖默认设置,向 components.xml 中增加以下项:

<web:multipart-filter create-temp-files="true"
                      max-request-size="1000000"
                      url-pattern="*.seam"/>
create-temp-files — 如果设置为 true,加载的文件被写到临时文件中(而不是保留在内存中)。 如果期望加载大文件,这个设置可能是一个很重要的考虑因素。默认的设置是 false。

max-request-size — 如果加载请求中的文件大小(由读取请求中 Content-Length 头的的值决定)超过这个值,该请求将被中止。默认设置是0(大小不限)。

url-pattern — 被用来指定过滤哪些请求,默认是所有请求。

字符编码
设置被提交的表单数据的字符编码

默认没有装载这个过滤器,它需要由 components.xml 中的一个项来启用:

<web:character-encoding-filter encoding="UTF-16"
                               override-client="true"
                               url-pattern="*.seam"/>
encoding — 要使用的编码

override-client — 如果它被设置为 true,则请求中的编码将被设置为 encoding 指定的任何值,而不管请求中是否已经指定一种编码。 如果设置为 false,当请求中没有指定任何一种编码时,才会设置请求编码。默认设置是 false

url-pattern — 被用来指定过滤哪些请求,默认是所有请求。

RichFaces
如果在你的工程中使用了Ajax4jsf,Seam会确保在装载其他所有内建过滤器之前,为你装载Ajax4jsf过滤器。 你不必亲自在 web.xml 中装载Ajax4jsf过滤器。

只有当你的工程中有RichFaces jar包时,才会安装RichFaces Ajax过滤器。

为了覆盖默认的设置,要在 components.xml 中增加以下项。这些选项与RichFaces开发者指南中指定的一样:

<web:ajax4jsf-filter force-parser="true"
                     enable-cache="true"
                     log4j-init-file="custom-log4j.xml"
                     url-pattern="*.seam"/>
force-parser — 强制Richfaces的XMl语法检验器去验证所有的JSF页面。 如果为 false,则只有AJAX响应才被验证并被转换成合适的XML。 设置force-parser 为 false 可以提高性能,但会在AJAX更新时提供可视化的工件。

enable-cache — 启用框架生成资源的缓存(如,JavaScript,CSS,Images等)。 当开发定制的JavaScript或CSS时,设置为true以阻止浏览器缓存这些资源。

log4j-init-file — 被用于安装 per-application 记录。 应该提供一个相对于web程序上下文的log4j.xml配置文件路径。

url-pattern — 用来指定过滤哪些请求,默认是所有请求。

Identity Logging
这个过滤器将被验证的用户名添加到log4j映射诊断上下文中,以便如果喜欢,可能通过在模式中添加%X{username},使它能够被包含在格式化过的日志输出中。

默认情况下,记录过虑器会处理所有请求,但是这一行为可以通过在 components.xml 中添加 <web:logging-filter> 项来进行调整,如下面的例子所示:

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:web="http://jboss.com/products/seam/web">
    <web:logging-filter url-pattern="*.seam"/>
</components>
url-pattern — Used to specify which requests the filter is active for. The default is all requests. url-pattern —用来指定该过滤器是为哪些请求而激活的。默认是所有请求。

定制Servlet的上下文管理
直接发送到某些Servlet而不是JSF Servlet的请求不在JSF生命周期中被处理,因此Seam提供了一个Servlet过滤器供其他的Servlet使用,这些Servlet需要访问Seam组件。

这个过滤器允许定制的Servlet与Seam上下文交互。它在每个请求的开始设立Seam上下文,并在请求结束时卸掉它们。 你必须确保这个过滤器 永远不 被用于JSF FacesServlet。 Seam在JSF请求中为上下文管理使用阶段监听器(phase listener)。

默认没有装载这个过滤器,它需要由 components.xml 中的一个项来启用:

<web:context-filter url-pattern="/media/*"/>
url-pattern — 被用来指定过滤哪些请求,默认是所有请求。 如果上下文过滤器的URL模式已指定,则将启用该过滤器(除非明确取消)。

上下文过滤器期望在名称为 conversationId 的请求参数中,找到所有对话上下文的对话id。 你要负责确保对话ID在请求中被发送。

你还需要负责确保将所有新的对话id传送回客户端。Seam将对话id作为内建的 conversation 组件的一个属性暴露出来。

增加定制的过滤器
Seam能为你装载过滤器,允许你指定过滤器要放在过滤器链中的 什么位置 (如果你在 web.xml 中指定自己的过滤器,servlet规范就没有提供一个定义良好的顺序)。 只需要给你的Seam组件加上 @Filter 注解(你的Seam组件必须实现 javax.servlet.Filter)。

@Startup
@Scope(APPLICATION)
@Name("org.jboss.seam.web.multipartFilter")
@BypassInterceptors
@Filter(within="org.jboss.seam.web.ajax4jsfFilter")
public class MultipartFilter extends AbstractFilter {
增加 @Startup 注解意味着该组件在Seam启动时有效;双向注入(bijection)在这里无效(@BypassInterceptors); 并且该过滤器在链中应该比Ajax4jsf过滤器(@Filter(within="org.jboss.seam.web.ajax4jsfFilter"))更靠后一些。
分享到:
评论

相关推荐

    JBOSS_SEAM配置

    JBOSS_SEAM配置

    Seam 2.1 安全模块框架

    Seam2.10安全API为你使用Seam开发的应用程序提供了大量与安全认证...• 权限管理 - 一组内置的Seam组件,能让应用程序的安全政策变得容易管理 • 验证码支持 - 帮助防止通过软件或脚本对你用Seam开发的网站进行攻击等等

    seam_in_action

    seam in action seam in action seam in action seam in action seam in action seam in action seam in action

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.6. 一个完整的Seam 应用程序:宾馆预订范例............................................................................................................ 45 1.6.1. 介绍......................................

    JSF项目中seam的配置

    文章里主要是把seam在jsf中的使用经验提一下,能让更多的人了解seam的实际应用和优势

    jboss-seam2.1

    Seam 是一种业级 企 Java 的应规用程序框架。它的灵感源自下列原 : 只有一种“工具” Seam为 应 业务业业 义 种统 组 你的 用程序中所有的 定 了一 一的 件模型。 Seam组件可能是 态义 关关 态 有状 的,包含与几...

    深入浅出JBoss Seam

    什么是Seam? 1. 整合和强化Java EE框架 2. 一个为ORM设计的Web框架 3.专为有状态Web应用而设计 4. 支持Web 2.0 5.依赖双向映射的Pojo服务 6.非常规的配置 ...5. 配置和打包 6. 为何这么简单?

    Seam环境配置.doc

    Seam环境配置.docSeam环境配置.docSeam环境配置.docSeam环境配置.doc

    seam+richfaces环境框架配置文件

    seam+richfaces环境框架的配置文件,经过我多次尝试才配置好的环境配置文件,很有用,适合刚接触这些技术的初学者,希望大家支持!

    seam的注解和标签

    seam中的注解总结,包括三种JPA和seam自身的标签

    Seam全称是Jboss Seam,是一个Java EE 5框架

    它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个最新的模式。Seam可以让你把EJB组件直接绑定到JSF页面。Seam还可以把JBPM流程定义直接地集成到应用...

    JBOSS.SEAM.WEB应用开发

    JBOSS.SEAM.WEB应用开发 中文版 (美)MichaelYuan.

    Seam框架文档简述

    Seam全称是Jboss Seam,是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个最新的模式。

    seam_carving 代码实现 seam

    seam_carving代码实现 图像缩放

    java seam开发环境搭建

    1、 Java环境的安装和配置 2、 JBoss环境的安装和配置 3、 Ant环境的安装和配置 4、 Seam环境的安装和配置 5、 Eclipse环境及JBoss Tools 插件的安装和配置

    如何部署seam的例子程序

    seam包自带了一些例子,本文帮助你如何使用ant部署并执行seam的例子,省去了用jboss ide或者eclipse部署seam项目带来的麻烦

    jboss seam

    Seam在JAAS和JBoss规则之上,创建了一个新的基于规则的安全框架。甚至有用来渲染PDF、在线电子邮件和图表及wikitext的JSF标签库。 Seam组件可以同时作为一个Web Service进行调用,异步地从客户端JavaScript或者...

    seam资料

    seam资料seam资料seam资料seam资料seam资料seam资料seam资料seam资料

    seam级联菜单例子

    seam级联菜单例子

    seam_seamcarving_

    seam carving的相关代码实现

Global site tag (gtag.js) - Google Analytics