2011-11-23 79 views
2

这种情况并非总是发生,而是经常发生,而且很烦人。当我尝试从String以外的值(在Action中声明)中获取值时,它会给我一个异常,如java.lang.NoSuchMethodException。Struts2 java.lang.NoSuchMethodException(表单值类型)

2011年11月23日下午4点13分20秒 com.opensymphony.xwork2.util.logging.commons.CommonsLogger警告 警告:错误值“[Ljava.lang.String设定表达 '乘客'; @ 157b2d” ognl.MethodFailedException:方法 “setPassengers” 失败对象[email protected] [java.lang.NoSuchMethodException: com.deveto.struts.actions.BookFlightAction.setPassengers([Ljava。 lang.String;)]

来自操作的代码:

private Integer passengers; 

public Integer getPassengers() { 
    return passengers; 
} 

public void setPassengers(Integer passengers) { 
    this.passengers = passengers; 
} 

的JSP:

<s:form action="book-flight" theme="simple"> 
     <s:textfield name="passengers" value=""/> 
</s:form> 

而且很奇怪的是它发生在随机所有的时间,而不是在某些特定点。你们有没有建议?

更新:我发现这一点:

1)http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434149

2)http://dev.bostone.us/2009/02/23/javaxfacesfacesexception-javalangclassnotfoundexception-ljavalangstring/#awp::2009/02/23/javaxfacesfacesexception-javalangclassnotfoundexception-ljavalangstring/(但它是Eclipse只)

+1

不应价值像'值= 0'因为' “”'应该是'String',你只需要'setPassanders(整数)'和'不setPassanders(字符串)'整数。另外,您可能必须在某处设置“类型” – PeterT

+0

这是自动填充完成的技巧,但是当我提交表单时,会有一个由用户输入的值。 – Denees

+0

给出引发异常的值的示例。你的方法期待一个Integer,确保它是一个而不是String。 –

回答

2

这种情况只能在传入的字符串值不代表基元或类型的有效实例时发生。

因为按你的说法是发生仅表示该输入是不是有什么期望

OGNL提供开箱即用型转换所有的原始和包装类型的几个时间。 只需进行调试即可找出乘客中究竟传递了什么信息。

There is no need to do any type conversion in struts2 until unless it is 
being not provided by OGNL else you are not using 
framework build in capabilities 
+0

我已经调试过,正如我所说,有一个整数:) – Denees

+0

你可以发布你的struts配置文件和jsp一些表单字段中的所有数据?只要渴望什么可以是一个问题,因为我从来没有面对过它。 –

+0

看看第一篇文章,我更新了它。现在我需要以某种方式解决它。 :) – Denees

2

喜欢这个名字Textfield表明,这种元素只处理文本。您可以强制它通过使用验证这里描述接受什么,但数字:Field Validators

您将然而仍然收到 String"7"不是整数的。您必须使用 Integer.parseInt(String) 手动进行解析。

编辑出错部分。

+0

我明白,但它并不是所有的时间,有时值是正确的,没有例外:) – Denees

+0

好吧,那很奇怪。你可以重载'setPassengers(String)'并打印被传输的字符串以及它在开始还是结束时是否有空格? – PeterT

+0

是的,它没有空格,它正常。我已经尝试过了。 – Denees