私は生年月日のテキストフィールドを持っています。ユーザーが無効な日付 (文字列など) を入力すると、エラー メッセージが fielderror として正常に表示されます。しかし、私のコンソールでは、次のエラーが発生しました。
java.lang.NoSuchMethodException: Profile.setBirthDate([Ljava.lang.String;)
エラーが発生した理由は何かを見逃したことがありますか?
私は生年月日のテキストフィールドを持っています。ユーザーが無効な日付 (文字列など) を入力すると、エラー メッセージが fielderror として正常に表示されます。しかし、私のコンソールでは、次のエラーが発生しました。
java.lang.NoSuchMethodException: Profile.setBirthDate([Ljava.lang.String;)
エラーが発生した理由は何かを見逃したことがありますか?
あなたの Action クラスには というメソッドがありsetBirthDate(String birthDate)
ません。それを追加して問題を解決してください。
すべてのプロパティのアクション クラスにすべての getter と setter を配置したことを確認してください。
あなたのJSPには次のものがあると思います:
<s:textfield name="birthDate" />
setBirthDate(String string)
このメソッドがアクションにないため、Struts はこれを にマップしようとします。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 を使用したくない場合は、たとえば公式ドキュメントを参照してください。