Struts2中是否有任何方法可以获取我的应用程序中的命名空间列表? 我希望在运行时将其设置为set或list。
我正在使用Struts2 RestActionMapper插件。 当为有效操作指定了无效的命名空间时,Struts会抛出命名空间错误。 但是,当发生此错误时,我无法重定向到标准错误页面。我尝试了几乎所有选项,例如全局错误映射默认命名空间等。没有任何效果。所以如果我能在我的应用程序中获取命名空间列表会很好,因此我可以在我的有效命名空间列表中检查无效命名空间,因此我可能抛出一般错误,这最终会导致我的标准错误页面。
我正在寻找如何获取项目中所有命名空间的列表。 所以基本上我想做这样的事情。
validNamespaces = getNamespaces();
如果(validNamespaces.contains(namespaceRetrivedFromRestPlugin)) {Sysout(“这是有效的命名空间。”)} 其他 {Sysout(“无效的命名空间”);}
答案 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()
方法调用此方法并将其存储在类级变量中。