如何在Struts 2中使用注解为action定义多个父包?

问题描述 投票:0回答:2

我正在开发 Struts 2 Web 应用程序,使用 Convention Plugin 通过注释配置所有内容。

我的一些操作类遇到了障碍,我想在其中使用多个父包。我在 Apache 的 Struts 站点 上没有找到这样做的示例,但这似乎已被弃用。

它不起作用,抛出错误:

类型不匹配:无法从

String[]
转换为
String

@ParentPackage({"my-parent-package1, my-parent-package2"})
package com.mycompany.myapp.actions

import org.apache.struts2.config.ParentPackage;

我使用的是Struts 2.2.1。是否可以通过注释为操作定义多个父包?看起来很奇怪,他们会把这个作为一项功能删除。

java annotations struts2 xml-configuration struts2-convention-plugin
2个回答
2
投票

您无法使用注释来完成此操作,但仍然可以通过 XML 配置来完成。 javadoc 说

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

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

##

这意味着java包中可以有多个父包。但是您不能在同一个类或包上放置两个或多个

@ParentPackage
注释。正如您所注意到的,父包不能有数组。但是您至少可以有两个父包,一个位于包定义,另一个位于操作类。不幸的是,配置构建器为此注释构建了两个配置,但仅为具有注释的配置创建了操作配置。


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.