整合系列之二--------------Struts 2整合MyFaces(16)

14.2  Struts 2整合MyFaces

要在Struts框架中整合MyFaces实现,只需要将相关的pluglin插件和相关类库复制到Web应用的lib目录下,增加一些配置内容就可以完整支持MyFaces

14.2.1   整合步骤

下面介绍Struts 2框架整合MyFaces的详细步骤。

1)复制MyFaces类库。将下载后的MyFaces压缩包解压,复制lib目录下的所有jar文件到Web应用的WEB-INF/lib目录下。

2)复制MyFaces插件。Struts 2框架下载包的lib目录下已经包含了JSF的插件,文件名称为struts2-jsf-plugin-x.x.x.jarx为相应的版本号。需要将该文件复制到Web应用的WEB-INF/lib目录下。

3)增加web.xml内容。为了整合Myfaces,需要在web.xml文件中增加如下内容:

<!--配置Myfaces-->

    <listener>

        <listener-class>

            org.apache.myfaces.webapp.StartupServletContextListener

        </listener-class>

    </listener>

    <!-- JavaServer Faces Servlet 配置-->

    <servlet>

        <servlet-name>faces</servlet-name>

        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <!-- JavaServer Faces Servlet Mapping配置 -->

    <servlet-mapping>

        <servlet-name>faces</servlet-name>

        <url-pattern>*.action</url-pattern>

    </servlet-mapping>

4)导入MyFaces标签库。为了在JSP视图中使用MyFaces标签,需要在JSP文件中使用如下代码来导入MyFaces标签库:

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>

<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>

5)引用JSF拦截器。还需要在Struts 2框架的Action配置文件中引用JSF拦截器,该拦截器默认名称为jsfStack,一个典型的引用拦截器的包配置如下:

<!--定义一个jsf包,该包继承jsf-defaultjsf-defaultstruts-plugin.xml中定义-->

    <package name="jsf" extends="jsf-default">

        <interceptors>

            <!--自定义拦截器栈-->

            <interceptor-stack name="jsfFullStack">

                <interceptor-ref name="params" />

                <interceptor-ref name="basicStack" />

                <!--jsf拦截器引用,见struts-plugin.xml中定义-->

                <interceptor-ref name="jsfStack" />

            </interceptor-stack>

        </interceptors>

        <!--设置为默认拦截器栈-->

        <default-interceptor-ref name="jsfFullStack" />

    </package>

    <!--继承jsf包,同时继承其默认拦截器,不需要再引用该拦截器-->

    <package name="ch14" extends="jsf" namespace="/ch14">

        <action name="list" class="ch14.UserAction">

        … …

        </action>

        … …

    </package>

14.2.2   整合原理

Struts 2框架整合JSF的关键在于Struts 2plugin插件struts2-jsf-plugin- 2.0.11 .jar,该插件压缩包的结构如图14.4所示。

14.4  struts2-jsf-plugin- 2.0.11 .jar插件目录

该目录下的struts-plugin.xml文件就是插件的配置文件,该文件内容如代码14.1所示。

代码14.1  struts-plugin.xml配置文件

 <!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

    <struts>

<!--  定义jsf-default -->

    <package name="jsf-default" extends="struts-default">

    <!—定义结果类型-->

        <result-types>

            <result-type name="jsf" class="org.apache.struts2.jsf.FacesResult" />

        </result-types>

        <interceptors>

<interceptor class="org.apache.struts2.jsf.FacesSetupInterceptor"

             name="jsfSetup" />

<interceptor class="org.apache.struts2.jsf.RestoreViewInterceptor"

             name="jsfRestore" />

<interceptor class="org.apache.struts2.jsf.ApplyRequestValuesInterceptor"

             name="jsfApply" />

<interceptor class="org.apache.struts2.jsf.ProcessValidationsInterceptor"

             name="jsfValidate" />

<interceptor class="org.apache.struts2.jsf.UpdateModelValuesInterceptor"

             name="jsfUpdate" />

<interceptor class="org.apache.struts2.jsf.InvokeApplicationInterceptor"

             name="jsfInvoke" />

            <interceptor-stack name="jsfStack">

                <interceptor-ref name="jsfSetup">

                   <param name="variableResolver">

                   org.apache.struts2.jsf.StrutsVariableResolver</param>

                   <param name="navigationHandler">

                   org.apache.struts2.jsf.StrutsNavigationHandler</param>

                </interceptor-ref>

                <interceptor-ref name="jsfRestore" />

                <interceptor-ref name="jsfApply" />

                <interceptor-ref name="jsfValidate" />

                <interceptor-ref name="jsfUpdate" />

                <interceptor-ref name="jsfInvoke" />

            </interceptor-stack>

        </interceptors>

        //定义默认拦截器栈

        <default-interceptor-ref name="jsfStack"/>

        </package>

</struts>

该配置文件定义定义了包jsf-default,该包中定义了一个名为jsf的结果类型,同时定义了一系列相关的拦截器,并将这些拦截器组成一个拦截器栈jsfStack,最后设置jsfStack作为包的默认拦截器。

注意

开发者在配置Struts 2框架的Action时,需要继承该jsf-default包,就可以同时继承jsf结果类型和默认的拦截器栈。

MyFaces的标签库文件在类库myfaces-impl-x.x.x.jar文件中,读者可以打开该压缩包,在META-INF目录下有两个标签库文件:myfaces_core.tldmyfaces_html.tld,开发者要在JSP页面中使用这两个标签库,则必须首先在页面中导入,导入代码如下所示:

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>

<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>

代码中的uri为标签库中的指定值,例如在myfaces_core.tld文件中,有如下内容:

… …

<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">

   <tlib-version>1.0</tlib-version>

   <jsp-version>1.2</jsp-version>

   <short-name>f</short-name>

   <uri>http://java.sun.com/jsf/core</uri>

   <display-name>JSF core tag library.</display-name>

   <description>

        This tag library implements the standard JSF core tags.

</description>

… …

读者可以看到,该标签库文件中的uri定义同JSP导入相同。

说明

要熟练使用MyFaces的标签库,可以参考相关文档。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值