java.lang.Enumを拡張するクラスにマップするラジオボタンを含むフォームを作成しようとしています。
<s:form action="corp_low_save">
<s:textfield label="Corporate Client Name" name="name"/>
<s:radio list="clientStatus.status" name="clientStatus.status"/>
<s:textfield label="Primary Address Street" name="primaryAddress.street"/>
<s:submit />
</s:form>
アクションはModelDrivenを実装し、getModel()を介して次のオブジェクトの新しいインスタンスを利用できるようにします。
public class com...Customer extends java.lang.Object{
protected java.lang.String name;
protected com...ClientStatus clientStatus;
protected com...Address primaryAddress;
public com...Customer();
public java.lang.String getName();
public void setName(java.lang.String);
public com...ClientStatus getClientStatus();
public void setClientStatus(com...ClientStatus);
public com...Address getPrimaryAddress();
public void setPrimaryAddress(com...Address);
}
関連する残りのクラスは次のとおりです。それらはすべてJAXBによって生成されました。
public class com...ClientStatus extends java.lang.Object{
protected com...StatusString status;
protected javax.xml.datatype.XMLGregorianCalendar since;
protected java.lang.String business;
public com...ClientStatus();
public com...StatusString getStatus();
public void setStatus(com...StatusString);
public javax.xml.datatype.XMLGregorianCalendar getSince();
public void setSince(javax.xml.datatype.XMLGregorianCalendar);
public java.lang.String getBusiness();
public void setBusiness(java.lang.String);
}
public final class com...StatusString extends java.lang.Enum{
public static final com...StatusString NEW_CLIENT;
public static final com...StatusString EXISTING_CLIENT;
public static final com...StatusString RENEWAL;
public static com...StatusString[] values();
public static com...StatusString valueOf(java.lang.String);
public java.lang.String value();
public static com...StatusString fromValue(java.lang.String);
static {};
}
このエラーが発生します:
org.apache.jasper.JasperException:タグ'radio'、フィールド'list'、name'clientStatus.status':要求されたリストキー'clientStatus.status'は、コレクション/配列/マップ/列挙型/イテレータタイプとして解決できませんでした。例:人または人。{名前}
問題が何であるかについてのアイデアはありますか?
編集: 問題はClientStatusがnullであるということだと思います。新しいCustomer()をインスタンス化しただけなので、そのフィールドはnullです。プログラムの2つの部分で重複する情報をエンコードする必要があるため、これは残念です。私はビューでこのようなことをすることができます:
<s:radio name="clientStatus.status"
list="#{'NEW_CLIENT':'New Client',
'EXISTING_CLIENT':'Existing Client',
'RENEWAL':'Renewal'}"/>
または、コントローラーで、ビューに必要なCustomerのフィールドを明示的にインスタンス化する必要があります。これはまた、特定のJAXBクラスをインスタンス化し、getModel()を介して利用できるようにするだけで、あらゆる種類のJAXBオブジェクトを処理できる一般的なアクションを作成するという私の希望を打ち砕きます。
この不幸な状況から回復する方法について誰かが何か考えを持っていますか?
編集2:最初のフォームを私が期待するものに修正しました。