【问题标题】:Struts 2 Convention Plugin Define Multiple Parent PackagesStruts 2 Convention Plugin 定义多个父包
【发布时间】:2013-01-08 02:22:20
【问题描述】:

我正在开发 Struts 2 Web 应用程序,使用 Convention Plugin 通过注释来配置所有内容。我的一些动作类遇到了障碍,我想在其中使用多个父包。我确实在Apache's site 上找到了一种方法——但这似乎已被弃用。它不起作用,抛出一个 Type mismatch: cannot convert from String[] to String 错误。

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

import org.apache.struts2.config.ParentPackage;

我正在使用 Struts 2.2.1。是否可以通过注释授予多个父包的操作?他们会将此作为一项功能删除,这似乎很奇怪。

【问题讨论】:

    标签: java struts2 annotations struts2-convention-plugin


    【解决方案1】:

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

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

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

    ##

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

    【讨论】:

    • 长话短说,roman 说的是正确的……但当然,有志者事竟成,但这需要一些工作。约定不能很好地与图块集成(即:如果图块视图以与 jsps/vm/fmt 相同的方式存在,则查找图块视图)可以扩展/构建约定。如果您查看插件 (struts-convention-plugin) xml 文件,我需要一个自定义 ResultProvider,您会看到许多不同 bean(扩展点)的定义,包括配置提供程序。我会从那里开始。这样您就可以提供自己的实现。
    【解决方案2】:

    我为您检查了org.apache.struts2.convention.annotation.ParentPackage,不允许定义多父包。这是sn-p:

    @Target({ElementType.TYPE, ElementType.PACKAGE})
    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface ParentPackage {
        /**
         * @return  The parent package.
         */
        String value();
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多