我正在做Struts 2 web应用程序,使用约定插件通过注释来配置一切。我的一些动作类遇到了一个障碍,我想在其中使用多个父包。我确实在Apache的网站上找到了一种方法,但似乎不推荐使用。它不工作,抛出一个类型不匹配:不能从String[]
转换到String
错误。
@ParentPackage({"my-parent-package1, my-parent-package2"})
package com.mycompany.myapp.actions
import org.apache.struts2.config.ParentPackage;
我正在使用Struts 2.2.1。是否有可能通过注释授予一个操作多个父包?奇怪的是,他们会删除这个功能。
不能通过注释来实现,但通过XML配置仍然可以实现。javadoc说
该注释允许操作修改它们使用的父包正在使用。因为XWork包是由Convention插件创建的通过操作所在的Java包,有一些棘手的问题处理XWork父包和XWork包的命名空间对于已发现的操作,以便同一包中的两个操作可以指定不同的父空间和命名空间,不要冲突。
为了正确处理这个问题,XWork包的名称操作被放置到其中的格式是这样构建的:
& lt; java包> # & lt; parent-xwork-package> # & lt;名称>
这意味着在java包中可能有多个父包。但是您不能在同一个类或包上放置两个或多个@ParentPackage
注释。正如你注意到的,父包不能有数组。但是你至少可以有两个父包,一个在包定义中,另一个在action类中。不幸的是,配置构建器为这个注释构建了两个配置,但操作配置只为有注释的那个创建。
我为您检查了org.apache.struts2.convention.annotation.ParentPackage
,它不允许定义多父包。下面是代码片段:
@Target({ElementType.TYPE, ElementType.PACKAGE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ParentPackage {
/**
* @return The parent package.
*/
String value();
}