随笔 - 0, 文章 - 6, 评论 - 0, 引用 - 0
数据加载中……

seam中的过滤器

Seam主过滤器 必须 是在 web.xml 中指定的第一个过滤器
增加主过滤器使得以下内建过滤器可用。

1异常处理
这个过滤器在 pages.xml 中提供异常映射功能(几乎所有的应用程序都需要这个)。

默认情况下,异常处理过滤器将处理所有请求,但是这种行为可以通过增加一个 <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>
2通过重定向传播对话
     <web:exception-filter url-pattern="*.seam"/>

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

<web:multipart-filter create-temp-files="true"
max-request-size="1000000"
url-pattern="*.seam"/>
4字符编码

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

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

<web:character-encoding-filter encoding="UTF-16"
override-client="true"
url-pattern="*.seam"/>
5RichFaces

如果在你的工程中使用了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"/>
6 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>
7 定制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 组件的一个属性暴露出来。

8增加定制的过滤器

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"))更靠后一些

posted on 2008-08-13 11:20 申君 阅读(506) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: