提交一个表单进行验证的时候报的错,我输入一个“aaaa”,想要的结果是验证器拦截然后提示不允许输入字母,只能输数字

我提交后   <tr>
      <td height="23" class="td2" align="center">售价:</td>
      <td class="td1"><s:textfield name="threads.TPrice" id="TPrice"></s:textfield> 分</td>
    </tr>
售价是Integer类型的在类里面
报错了····
求助~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    2010-1-13 19:48:21 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
    警告: Error setting expression 'threads.TPrice' with value '[Ljava.lang.String;@10caadb'
    ognl.MethodFailedException: Method "setTPrice" failed for object com.gulebao.posts.entity.Threads@bf3c40 [java.lang.NoSuchMethodException: com.gulebao.posts.entity.Threads.setTPrice([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1265)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:28)
      

  2.   

    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
    at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.ASTChain.setValueBody(ASTChain.java:227)
    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:198)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(
      

  3.   

    OgnlValueStack.java:161)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(
      

  4.   

    com.gulebao.posts.entity.Threads这个类有这个方法是setTPrice(Integer arg),你的validation.xml应该将此字段的匹配类型应该为integer,而不是string
      

  5.   

    <field name="threads.TPrice">
    <field-validator type="int">
    <message>内容不能为空</message>
    </field-validator>

    <field-validator type="regex">
    <param name="expression">^[0-9a-z_A-Z\u4e00-\u9fa5]+$</param>
    <message>含有非法的字符,请重新输入</message>
    </field-validator>
    </field>
    我改了,可是,还是报错···
      

  6.   

    java.lang.NoSuchMethodException: com.gulebao.posts.entity.Threads.setTPrice([Ljava.lang.String;)
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1206)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:28)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
    at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.ASTChain.setValueBody(ASTChain.java:227)
    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:198)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
      

  7.   

    直接写js验证算啦
    struts的验证框架用的不太爽
      

  8.   

    struts2自带的类型转换器在页面也发出了类型转换错误的信息,可是,为什么控制台还要报错啊···天啊
      

  9.   

    楼主,问题很明显,你的验证框架没有配对,你再好好看看struts2的验证框架怎么配的
      

  10.   

    可是在jsp页面,struts2自带的类型转换验证器打出了类型转换异常的信息啊,Invalid field value for field "threads.TPrice,
      

  11.   

    那就要看你的<s:textfield>是怎么定义的,如果它没有转换类型,那就会抛这个异常
      

  12.   

     <tr> 
          <td height="23" class="td2" align="center">售价: </td> 
          <td class="td1"> <s:textfield name="threads.TPrice" id="TPrice"> </s:textfield> 分 </td> 
        </tr> 
      

  13.   

    还是验证框架没配对,如果配对了是不会把你输入的值赋给TPrice的,而直接提示验证里面的信息