有没有办法配置是否可以调用struts动作?
例如,我有以下类:
public class MyAction {
public String myMethod() {
// logic
}
}
和struts.xml
文件:
<action class="MyAction" method="myMethod"/>
我可以在此文件中添加一个配置,让我禁用此操作的调用,例如:
<action class="MyAction" method="myMethod">
<param name="disable">true</param>
</action>
这种情况的用例可能是我想在开发模式下禁用动作的执行,即我有一个动作,我使用AJAX从客户端调用它。调用操作可确保我的应用程序的重要功能。此功能对于应用程序正常运行是必需的。但是,此功能可能是开发模式的负担,因此禁用它(仅在此模式下)将非常有用。
解决此问题的一种方法是使用拦截器机制(如评论中所示)。但是,这可以在配置级别完成吗?
答案 0 :(得分:1)
有多种方法可以实现这一目标。我将列出其中的几个。
创建并在您的开发配置中添加一个自定义拦截器,它将根据某个黑名单检查当前操作名称,如果在此列表中,将跳过操作执行。 (您可以将动作名称黑名单放入某些属性文件中。)
将myMethod
文件中method
属性中的struts.xml
更改为您操作中的某个方法,该方法返回NONE
结果。通过这种方式,您可以在构建生产时轻松替换它,手动或使用您喜欢的构建工具进行替换。
您还可以为您的开发环境创建单独的struts.xml
文件,并将其交换为生产版本。
假设在您的开发环境struts.devMode
常量设置为true
,您可以将其注入您的操作类并在方法中使用它来检查是否应该执行
private boolean devMode;
@Inject(StrutsConstants.STRUTS_DEVMODE)
public void setDevMode(String mode) {
devMode = Boolean.valueOf(mode);
}
public String myMethod() {
if(devMode) {
return NONE;
}
// ...
return SUCCESS;
}