Struts 2中“action”属性之间的冲突

时间:2013-07-15 21:09:22

标签: struts2 struts

我尝试将我的struts2操作类(CommonAction.java)中的操作信息(如Save或Edit)传递给jsp文件(test.jsp)。

在动作类中,我使用以下代码设置动作值。

request.setAttribute("action","Save");

当我尝试在jsp文件中获取action属性时。

String actionValue = (String)request.getAttribute("action");

我在jsp文件中获取动作类而不是动作值。

以下是异常追踪。

java.lang.ClassCastException: com.actions.CommonAction cannot be cast to java.lang.String
at org.apache.jsp.jsp.common.test_jsp._jspService(test_jsp.java:119)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)

有没有办法在不更改属性名称的情况下获取操作值?

2 个答案:

答案 0 :(得分:3)

此功能由StrutsRequestWrapper提供。它会覆盖getAttribute()方法以支持在OGNL值堆栈中搜索属性。您可以通过在struts.xml中设置以下内容来禁用该功能:

<constant name="struts.disableRequestAttributeValueStackLookup" value="true"/>

答案 1 :(得分:0)

在您的jsp页面中使用${requestScope.action}。如果它返回错误的值,则在您的操作中声明一个getter方法(public String getAction())并使用previus EL代码获取结果

action value: ${requestScope.action}