You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Mohit Gupta <mo...@gmail.com> on 2014/06/12 07:48:52 UTC

Forward to exception page instead of result in case of ognl runtime exception ?

I have below action class where customerId is integer. If i pass customerId
as string from UI(I know it should not be allowed but there are
ways user can do it), i get  exception ognl.MethodFailedException: . Please
find  stack trace at last
 @Results({
    @Result(name = "displayCustomer", location = "customer.jsp")
})
 public class CustomerAction{
  private int     customerId = -1;
 @Action("getCustomer!getCustomer")
  public String getCustomer() {
  ....
  return "displayCustomer";
  }

   public int getCustomerId() {
    return customerId;
  }

  public void setCustomerId(int customerId) {
    this.customerId = customerId;
  }


}
 Stack Trace
 2014-06-12 09:58:33,725 [http-8080-6] WARN  ognl.OgnlValueStack - Error
setting expression 'customerId' with value '[Ljava.lang.String;@35997e91'
ognl.MethodFailedException: Method "setCustomerId" failed for object
com.test.struts2fw.actions.CustomerAction@48819db7
[java.lang.NoSuchMethodException:
com.test.struts2fw.actions.CustomerAction.setCustomerId([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
at
ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at
com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
at
com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:78)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:218)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:187)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)
at
com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:152)
at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)
Once this exception is encountered, it take flow to customer.jsp. What i
want is flow go to my Exception.jsp instead of result in case
of some ognl/struts 2 exception?

Re: Forward to exception page instead of result in case of ognl runtime exception ?

Posted by Lukasz Lenart <lu...@apache.org>.
Define validation for this field, then you will get validation error
and Struts will forward to input result

2014-06-12 7:48 GMT+02:00 Mohit Gupta <mo...@gmail.com>:
> I have below action class where customerId is integer. If i pass customerId
> as string from UI(I know it should not be allowed but there are
> ways user can do it), i get  exception ognl.MethodFailedException: . Please
> find  stack trace at last
>  @Results({
>     @Result(name = "displayCustomer", location = "customer.jsp")
> })
>  public class CustomerAction{
>   private int     customerId = -1;
>  @Action("getCustomer!getCustomer")
>   public String getCustomer() {
>   ....
>   return "displayCustomer";
>   }
>
>    public int getCustomerId() {
>     return customerId;
>   }
>
>   public void setCustomerId(int customerId) {
>     this.customerId = customerId;
>   }
>
>
> }
>  Stack Trace
>  2014-06-12 09:58:33,725 [http-8080-6] WARN  ognl.OgnlValueStack - Error
> setting expression 'customerId' with value '[Ljava.lang.String;@35997e91'
> ognl.MethodFailedException: Method "setCustomerId" failed for object
> com.test.struts2fw.actions.CustomerAction@48819db7
> [java.lang.NoSuchMethodException:
> com.test.struts2fw.actions.CustomerAction.setCustomerId([Ljava.lang.String;)]
> at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305)
> at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
> at
> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
> at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
> at
> com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
> at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
> at
> com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:78)
> at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)
> at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
> at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
> at ognl.SimpleNode.setValue(SimpleNode.java:301)
> at ognl.Ognl.setValue(Ognl.java:737)
> at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:218)
> at
> com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:187)
> at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)
> at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:152)
> at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)
> Once this exception is encountered, it take flow to customer.jsp. What i
> want is flow go to my Exception.jsp instead of result in case
> of some ognl/struts 2 exception?

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org