【发布时间】:2012-05-25 18:28:55
【问题描述】:
我有出生日期的文本字段。当用户输入无效日期时,例如一个字符串,错误消息成功显示为 fielderror。但是在我的控制台中,我收到了这个错误:
java.lang.NoSuchMethodException: Profile.setBirthDate([Ljava.lang.String;)
我是否遗漏了一些导致我遇到错误的原因?
【问题讨论】:
标签: struts2
我有出生日期的文本字段。当用户输入无效日期时,例如一个字符串,错误消息成功显示为 fielderror。但是在我的控制台中,我收到了这个错误:
java.lang.NoSuchMethodException: Profile.setBirthDate([Ljava.lang.String;)
我是否遗漏了一些导致我遇到错误的原因?
【问题讨论】:
标签: struts2
在您的 Action 类中,您没有名为 setBirthDate(String birthDate) 的方法,添加它您的问题应该得到解决。
注意检查您是否已将所有 getter 和 setter 放置在所有属性的操作类中。
我认为你的 JSP 中有:
<s:textfield name="birthDate" />
Struts 将尝试将此映射到 setBirthDate(String string),因为您的操作中缺少此方法,因此 NoSuchMethodException
更新:
将字符串转换为日期:
public class MyStringToDateConverter extends StrutsTypeConverter {
public Object convertFromString(Map context, String[] values, Class toClass) {
//Parse String to get a date object
}
public String convertToString(Map context, Object o) {
// Get the string from object o
}
}
如果您在动作类中使用注释,则将 @Conversion() 添加到您的动作中
@Conversion()
public class MyAction extends ActionSupport{
public Date myDate = null;
@TypeConversion(converter="MyStringToDateConverter") //Fully qualified name so if this class is in mypackage then converter will be "myPackage.MyStringToDateConverter"
public void setMyDate(Date date) {
this.myDate = date;
}
}
如果您不想使用 Annotation,则可以查看 official documentation 示例。
【讨论】: