让我问一个问题,也许很简单,但我是Struts2的新手。
我在ProfileAction操作中有这个动作方法:
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
String id = (String) session.getAttribute("id");
if (id != null && !id.equals("") && !id.equals("0")) {
return SUCCESS;
}
return "noSession";
}
这在XML中:
<action name="perfil" class="agenda.ProfileAction">
<result name="success" type="tiles">/profile.tiles</result>
<result name="noSession" type="tiles">/login.tiles</result>
</action>
<action name="conexion" class="agenda.ProfileAction" method="login">
<interceptor-ref name="jsonValidationWorkflowStack">
<param name="validation.excludeMethods">init,input</param>
</interceptor-ref>
<result name="loginSuccess" type="tiles">/login/success.tiles</result>
<result name="loginError" type="tiles">/login/error.tiles</result>
</action>
如您所见,我在默认方法中有“noSession”结果,但是当我运行页面时,它会抛出异常,因为需要“输入”结果。当我用“输入”替换XML中的“noSession”时,它可以工作,但副作用是JSON验证不起作用。
似乎没有调用execute方法。我甚至放置了一个抛出异常,事实上,它没有被调用。
我正在努力以这种方式召集行动:
答案 0 :(得分:2)
您几乎肯定会收到验证或类型转换错误。
当发生这种情况时,S2将尝试将您转到“输入”结果以重新填写表单。
不相关,但是从这样的请求中获取值完全否定了S2的很多功能。考虑一些教程/等。并使用内置的便利设施。
查看拦截器堆栈的一种简单,人类可读的方法是使用分析拦截器。这可以配置为默认值,也可以基于每个操作进行设置:
<action name="themes" class="test.ThemesAction">
<interceptor-ref name="profiling">
<param name="profilingKey">profilingKey</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<result>/WEB-INF/jsps/themes.jsp</result>
</action>
将包含“profilingKey”参数的请求设置为“true”,您的日志将显示:
2013-04-09 21:22:25,813 INFO : [1959ms] - invoke:
[1959ms] - interceptor: exception
[1959ms] - invoke:
[1959ms] - interceptor: alias
[1959ms] - invoke:
[1959ms] - interceptor: servletConfig
[1957ms] - invoke:
[1957ms] - interceptor: i18n
[1957ms] - invoke:
[1957ms] - interceptor: prepare
[1956ms] - invoke:
[1956ms] - interceptor: chain
[1956ms] - invoke:
[1956ms] - interceptor: debugging
[1956ms] - invoke:
[1956ms] - interceptor: scopedModelDriven
[1956ms] - invoke:
[1956ms] - interceptor: modelDriven
[1956ms] - invoke:
[1956ms] - interceptor: fileUpload
[1956ms] - invoke:
[1956ms] - interceptor: checkbox
[1956ms] - invoke:
[1956ms] - interceptor: multiselect
[1956ms] - invoke:
[1956ms] - interceptor: staticParams
[1955ms] - invoke:
[1955ms] - interceptor: actionMappingParams
[1955ms] - invoke:
[1955ms] - interceptor: params
[1954ms] - invoke:
[1954ms] - interceptor: conversionError
[1954ms] - invoke:
[1954ms] - interceptor: validation
[1897ms] - invoke:
[1897ms] - interceptor: workflow
[1897ms] - invoke:
[7ms] - invokeAction: themes
[1889ms] - executeResult: success