Struts 2 Convention插件定义多个父包

时间:2013-01-08 02:22:20

标签: java struts2 annotations struts2-convention-plugin

我正在使用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。是否可以通过注释授予多个父包的操作?奇怪的是他们会将此作为一项功能删除。

2 个答案:

答案 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();
}