【问题标题】:NoSuchMethodException in Struts2Struts2 中的 NoSuchMethodException
【发布时间】:2012-05-25 18:28:55
【问题描述】:

我有出生日期的文本字段。当用户输入无效日期时,例如一个字符串,错误消息成功显示为 fielderror。但是在我的控制台中,我收到了这个错误:

java.lang.NoSuchMethodException: Profile.setBirthDate([Ljava.lang.String;)

我是否遗漏了一些导致我遇到错误的原因?

【问题讨论】:

    标签: struts2


    【解决方案1】:

    在您的 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 示例。

    【讨论】:

    • 它是 java.util.Date,而不是 String。
    • s:textField 将映射到字符串而不是日期
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多