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的。
struts2的namespace配置
最新推荐文章于 2022-08-20 08:57:51 发布