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





Monday, April 28, 2008, 12:48:43 PM (CST)
刚在open-open看到你的blog,感觉很不错,我想问你一下你是用哪里的主机,我还是在校学生,钱不多,很多主机都不支持spring,支持的又贵,郁闷啊.
Thursday, July 03, 2008, 07:12:30 PM (CST)
struts2还不错
Thursday, August 28, 2008, 05:12:03 PM (CST)
哈哈,我又来了,太有缘了,多次无意中来到你的博客,
我认为这个功能实在没有什么用处,为了后期的维护开发,就应该使用配置文件,而不应该使用注解0配置来配置.
我认为,这个0配置的功能,真的只是一个噱头,没有一点实用价值,如果真要这么用,那与简单的Jsp+javabean+servlet分层来做有什么太大的优势呢.
Friday, August 29, 2008, 03:58:21 PM (CST)
这样说没错。
0配置其实还不够灵活。不过现在开发还是很多人用。从重构来说IDE对annotation的支持比xml支持要好。
也许最大的优势就是简化和快速吧。