1

在 Struts2 中有什么方法可以让我在我的 App 中获取命名空间列表?我希望它在运行时设置或列出。

我正在使用 Struts2 RestActionMapper 插件。当为有效操作指定了无效的命名空间时,Struts 会抛出命名空间错误。但是发生此错误时,我无法重定向到标准错误页面。我尝试了几乎所有选项,例如全局错误映射默认命名空间等。没有任何效果。所以认为如果我能在我的应用程序中获得命名空间列表会很棒,因此我可以根据我的有效命名空间列表检查无效命名空间,因此我可以抛出通用错误,最终导致我的标准错误页面。


我正在寻找如何获取项目中所有命名空间的列表。所以基本上我想做这样的事情。

有效命名空间 = 获取命名空间();

if(validNamespaces.contains(namespaceRetrivedFromRestPlugin)) {Sysout("这是有效的命名空间。")} else {Sysout("无效的命名空间");}

4

1 回答 1

0

这是可能的,尽管就像史蒂文所说的那样,我不相信这是解决您重定向到错误页面的问题的正确方法。但是,我将把这部分留给您,并使用这个空间来回答命名空间问题。

该代码必须在 Struts2 创建的对象中才能使注入工作。

private Configuration configuration;

@Inject
public void setConfiguration(Configuration config) {
    this.configuration = config;
}

protected Set<String> getNamespaces() {
    Set<String> namespaces = Collections.emptySet();
    Map<String, Map<String, ActionConfig>> allActionConfigs = this.configuration.getRuntimeConfiguration().getActionConfigs();
    if (allActionConfigs != null) {
        namespaces = allActionConfigs.keySet();
    }
    return namespaces;
}

配置也可以从ConfigurationManager. 此外,您显然希望将这些存储在一个变量中,而不是一遍又一遍地调用上述方法。例如,如果您的对象是 an interceptor,那么您可以从该方法调用此方法init()并将其存储在类级变量中。

于 2012-08-04T22:30:03.307 回答