我正在尝试创建一个表单,其中包含一个映射到扩展 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>
Action 实现了 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”,名称“clientStatus.status”:请求的列表键“clientStatus.status”无法解析为集合/数组/映射/枚举/迭代器类型. 示例:人或人。{name}
关于问题可能是什么的任何想法?
编辑: 我认为问题在于 ClientStatus 为空。由于我只是实例化了一个 new Customer() 它的字段为空。这很糟糕,因为它需要我在程序的两个部分中对重复信息进行编码。我可以在视图中做这样的事情:
<s:radio name="clientStatus.status"
list="#{'NEW_CLIENT':'New Client',
'EXISTING_CLIENT':'Existing Client',
'RENEWAL':'Renewal'}"/>
或者,在控制器中,我必须显式实例化我的视图需要的 Customer 字段。这也使我编写一个可以处理各种 JAXB 对象的通用操作的希望破灭了,只需实例化给定的 JAXB 类并通过 getModel() 使其可用。
有人对如何从这种不幸的情况中恢复过来有任何想法吗?
编辑 2:将第一个表单修复为我期望的工作。