我正在使用Struts 2 Web应用程序,使用Convention插件通过注释配置所有内容。我正在尝试一些我的动作类,我想使用多个父包。我确实找到了在Apache's site上执行此操作的方法 - 但这似乎已被弃用。它不起作用,丢弃类型不匹配:无法从String[]
转换为String
错误。
@ParentPackage({"my-parent-package1, my-parent-package2"})
package com.mycompany.myapp.actions
import org.apache.struts2.config.ParentPackage;
我正在使用Struts 2.2.1。是否可以通过注释授予多个父包的操作?奇怪的是他们会将此作为一项功能删除。
答案 0 :(得分:2)
你不能用注释来做,但它仍然可以通过XML配置。 javadoc说
此注释允许操作修改它们的父包 正在使用。由于XWork包是由Convention插件创建的 通过存在操作的Java包,有一些棘手的问题 处理XWork包的XWork父包和命名空间 对于已发现的操作,以便同一个包中的两个操作可以 指定不同的父级和名称空间而不发生冲突
为了正确处理这个,XWork包的名称 放置的操作是使用以下格式构建的:
< java-package>#< parent-xwork-package>#< namespace>
这意味着可以在java包中拥有多个父包。但是,您不能在同一个类或包上放置两个或更多@ParentPackage
个注释。因为你注意到父包不能有数组。但是,您至少可以在包定义中使用两个父包,而在操作类中至少包含两个父包。不幸的是,配置构建器为此注释构建了两个配置,但仅为具有注释的配置创建了操作配置。
答案 1 :(得分:1)
我为您检查了org.apache.struts2.convention.annotation.ParentPackage
,不允许定义多父包。这是片段:
@Target({ElementType.TYPE, ElementType.PACKAGE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ParentPackage {
/**
* @return The parent package.
*/
String value();
}