我编写了自定义拦截器,并且在后处理时我想通过检查值堆栈上是否存在异常对象来添加 actionError/actionMessage。
public String intercept(ActionInvocation invocation) throws Exception {
result= invocation.invoke();
// postprocessing start
invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation invocationInner, String resultCode) {
Object obj=invocation.getInvocationContext().getValueStack().findValue("exception");
if(obj!=null)
{
if(obj instanceof Exception)
{
try{
Object action=invocation.getAction();
((ActionSupport)action).addActionError("Error");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
return result;
如果结果是“错误”,我将重定向到 error.jsp
<s:if test="hasActionErrors()">
<s:actionerror/>
</s:if>
但 error.jsp 上没有显示任何内容
即使我正在尝试从拦截器中设置参数,例如
invocationInner.getInvocationContext().getValueStack().setValue("errorNum", "333");
或者
Map<String, Object> parameters = invocationInner.getInvocationContext().getParameters();
parameters.put("errorNum", "8888");
invocationInner.getInvocationContext().getValueStack().push(parameters);
并访问jsp上的参数,例如
<s:property value="%{#parameters['errorNum']}"/>
但是没有效果我在jsp上仍然一无所获是因为对象的范围,因为当我在会话中设置变量时它工作正常。
我实施后处理的方法是错误的还是我遗漏了什么。