在Eclipse中调试Maven项目 关于Sudo的一些提示
Apr 22

Struts2的零配置功能减少了非常多的xml配置。所以公司最近的一个项目也用到了。这里讲一下关于namespace的配置。现在我要达到的目的就是添加一个/adm的namespace用于后台管理相关的action。

首先我们要在struts2的filter里面添加action的package信息
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>com.xxx.yyy.action</param-value>
        </init-param>
    </filter>

这样struts2就会去com.xxx.yyy.action包下面找所有实现了Action的类。也会去找子package下的类。下面引用一下《》的内容:

被配置过的每一个package和它的子package都会被扫描到,看其中哪些类实现了Action或者类名以“Action”结尾,然后注解就会被加入到运行时配置中去。如果没有使用namespace注解的话,那么命名空间就会由package名来生成。把“actionPackages”配置值中使用的package名称截掉,就得到了命名空间。也就是说,如果某个被配置好的action的名字是“actions.admin.user.AddAction”,而“actionPackages”的值为“actions”,那么这个action的命名空间就是“/admin/user”。

所以namespace可以通过packagename来实现。
不过我还要这个namespace下的action使用不同的interceptor stack.所以我不得不在xml配置文件里面添加一个<package>通过这个<package>节点来配置namespace和interceptor stack.
    <package name="Administration" extends="struts-default" namespace="/adm">
       <interceptors>
           <interceptor name="loginInterceptor" class="com.xxx.yyy.interceptor.LoginInterceptor"/>
           <interceptor name="SpringBeanInjectionInterceptor" class="com.xxx.core.struts.SpringBeanInjectionInterceptor"/>
           <interceptor-stack name="Administration">
               <interceptor-ref name="SpringBeanInjectionInterceptor"/>
               <interceptor-ref name="params"/>
               <interceptor-ref name="loginInterceptor"/>
           </interceptor-stack>
       </interceptors>
       <default-interceptor-ref name="Administration"/>
    </package>

那这样在Action类里怎么配置呢。那就用到了@ParentPackage这个annotation.这个就可以指定Action的Package。
@ParentPackage(value = "Administration")
其中的value就是xml配置文件中的package的name。值得注意的是在你的Action的Package中的任何一个类指定@ParentPackage信息就可以了。不需要每个Action都指定。也就是说这个@ParentPackage其实是针对Package的。


Like others

4 Responses to “关于struts2的namespace配置”

  1. 刘凯 Says:

    刚在open-open看到你的blog,感觉很不错,我想问你一下你是用哪里的主机,我还是在校学生,钱不多,很多主机都不支持spring,支持的又贵,郁闷啊.

  2. 汽车 Says:

    struts2还不错

  3. 巴士飞扬 Says:

    哈哈,我又来了,太有缘了,多次无意中来到你的博客,
    我认为这个功能实在没有什么用处,为了后期的维护开发,就应该使用配置文件,而不应该使用注解0配置来配置.
    我认为,这个0配置的功能,真的只是一个噱头,没有一点实用价值,如果真要这么用,那与简单的Jsp+javabean+servlet分层来做有什么太大的优势呢.

  4. 莫多(somebody) Says:

    这样说没错。
    0配置其实还不够灵活。不过现在开发还是很多人用。从重构来说IDE对annotation的支持比xml支持要好。
    也许最大的优势就是简化和快速吧。

Leave a Reply

Identifying Code