Я пытаюсь создать форму, которая содержит переключатель, который отображается на класс, который расширяет 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 (), его поля пустые.Это облом, потому что он требует, чтобы я закодировал дублирующую информацию в двух частях моей программы.Я могу сделать что-то вроде этого в представлении:
<s:radio name="clientStatus.status"
list="#{'NEW_CLIENT':'New Client',
'EXISTING_CLIENT':'Existing Client',
'RENEWAL':'Renewal'}"/>
Или в контроллере я должен явно создать поля Customer, которые нужны моему представлению.Это также лишает меня надежды на написание общего действия, которое может обрабатывать все виды объектов JAXB, просто создавая экземпляр данного класса JAXB и делая его доступным через getModel ().
У всех есть идеи о том, как восстановиться после этого.Неудачное положение вещей?
Редактировать 2: Исправлена первая форма, что я ожидал работать.