Struts 2中是否有任何方法可以在我的应用程序中获取所有命名空间?

时间:2012-08-02 15:31:04

标签: struts2 struts

Struts2中是否有任何方法可以获取我的应用程序中的命名空间列表? 我希望在运行时将其设置为set或list。

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


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

validNamespaces = getNamespaces();

如果(validNamespaces.contains(namespaceRetrivedFromRestPlugin))    {Sysout(“这是有效的命名空间。”)} 其他    {Sysout(“无效的命名空间”);}

1 个答案:

答案 0 :(得分:0)

这是可能的,虽然像Steven已经说过的那样,我不相信这是解决你重定向到错误页面的问题的正确方法。但是,我会把那部分留给你并使用这个空间来回答命名空间问题。

此代码必须位于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获取配置。此外,您显然希望将这些存储在变量中,而不是一遍又一遍地调用上面的方法。如果您的对象是interceptor,那么您可以从init()方法调用此方法并将其存储在类级变量中。