转MyFaces的扩展过滤器

扩展过滤器是做什么的?
一些 MyFaces 组件在页面中包含的比一些HTML更多一些.它们可能需要附加的支持脚本,样式表,图片...

那些资源文件都包含在MyFaces的jar包文件里 ,扩展过滤器添加代码和URL所需要提供的那些资源文件到生成的HTML.

一些其它组件,像文件上传组件(t:inputFileUpload)需要解析 Multipart 请求.

扩展过滤器也就处理这个.

为什么这是有用的?
这样设计有几个好处:

它提供了一个MyFaces组件和你的 web程序彻底分离.
你不需要包含附加的MyFaces组件相关的代码和资源文件到你的页面和web程序.
它提供了易用性,使得MyFaces团队可以更新他们的组件并保持清晰的相后 兼容性.
它使在页面开发中复杂组件 使用多个支持的资源文件而没有任何负担成为可能.
它仅为渲染组件加载有用的资源文件.
它处理MyFaces资源文件的缓存.
它如何工作?
当一个组件需要一个资源文件,它会调用一个org.apache.myfaces.component.html.util.AddResource的方法(例如 AddResource.addJavaScriptToHeader(InputHtmlRenderer.class, "sarissa.js", context); ).

AddResource方法添加一个属性到请求使过滤器被提醒为你的 JSF页面包含特定的javascript, 样式表, 或者资源链接到生成的HTML中.

一个深入的资源文件URL以/faces/myFacesExtensionResource开始,所以当客户端需要加载这个资源文件时它可以被拦截.

当客户端索取资源时,过滤器解码URL,然后从MyFaces的jar包文件服务适当的资源文件.

如何配置它?
在web.xml文件中, 为你JSF页面映射过滤器到路径(最 常用的像 .jsf),来使过滤器可以在你的JSF页面更新资源文件, 然后映射过滤器到/faces/myFacesExtensionResource/ 路径,来使它服务页面需要的资源文件,如 图片,javascript文件, 样式表. 这是一个扩展过滤器的配置的 例子:

<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
    <init-param>
        <param-name>maxFileSize</param-name>
        <param-value>20m</param-value>
        <description>Set the size limit for uploaded files.
            Format: 10 - 10 bytes
                    10k - 10 KB
                    10m - 10 MB
                    1g - 1 GB
        </description>
    </init-param>
</filter>

<!-- extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages  -->
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

<!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.)  -->
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
另外使用url-pattern映射代替servlet-name(你仍然也需要/faces/myFacesExtensionResource/*映射):

<!-- extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages  -->
<filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
</filter-mapping>
在什么情况下需要使用扩展过滤器?
如果你仅使用标准的JSF组件,但不使用MyFaces扩展组件(以t:开始的) , 那么你不需要扩展过滤器.

然而,倘若你使用一些MyFaces的扩展组件,像t:inputFileUpload, t:inputHtml, t:inputCalendar,等,那么你大部分情况下可能需要在你的web程序中有这个过滤器配置.

这影响效率吗?
这个过滤器对响应时间没有任何重大影响.

然而在把它写到客户端前必须缓存整个响应,所以它会稍微更加内存的使用.
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值