1

我正在开发 Struts 2 Web 应用程序,使用 Convention Plugin 通过注释来配置所有内容。我的一些动作类遇到了障碍,我想在其中使用多个父包。我确实在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。是否可以通过注释授予多个父包的操作?他们会将此作为一项功能删除,这似乎很奇怪。

4

2 回答 2

2

您不能使用注释来做到这一点,但仍然可以通过 XML 配置来实现。javadoc说

此注释允许操作修改它们正在使用的父包。由于 XWork 包是由 Convention 插件通过动作所在的 Java 包创建的,因此对 XWork 父包和 XWork 包的命名空间进行一些棘手的处理以发现动作,因此同一包中的两个动作可以指定不同的父包和没有冲突的命名空间。

为了正确处理这个问题,操作所在的 XWork 包的名称使用以下格式构建:

<java-package>#<parent-xwork-package>#<namespace>

这意味着 java 包中可能有多个父包。但是你不能@ParentPackage在同一个类或包上放置两个或多个注解。正如您注意到的那样,父包不能有数组。但是您至少可以有两个父包,一个在包定义中,另一个在动作类中。不幸的是,配置构建器为此注释构建了两个配置,但操作配置仅针对具有注释的配置创建。

于 2013-01-08T11:17:47.230 回答
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();
}
于 2013-01-08T08:05:50.963 回答