有谁知道如何在不使用任何自定义转换器的情况下在 Struts 2 中处理这种情况。
我的模型定义
1.Booking
public class Booking extends BaseModel{
private String bookingNo;
.....
private List<Part>parts = new ArrayList<Part>();
private List <? extends ToDoItem>toDoItems = new ArrayList< ToDoItem>();
....
}
2.ToDoItem
public class ToDoItem extends BaseModel{
private Integer sequence;
private String bookingNo;
private String serviceCode;...
3.从 ToDoItem 继承的指定 todoitem 例如 PDAS
public class PDAS extends ToDoItem{
private Date estPickupTime;
private Date actPickupTime;
private Date estArriAtWarehouseTime;
private Date actArriAtWarehouseTime;...
调查员:
public class INSP extends ToDoItem{
private String confirmOk;
private Date actInspTime;
private List<BookingItem>bookingItems;.....
...(更详细的 ToDoItem)
然后在html页面中,表单定义如下:
PDAS todoitem html
<table class="form-table">
<tr class="row">
<td class="td-label" colspan="2">
<s:label key="INSP" cssStyle="color:blue;"/>
</td>
<td class="td-label">
<s:label key="ToDoItem.status"/>
</td>
<td class="td-field">
<s:property value="booking.toDoItems[1].status"></s:property>
</td>
<td class="td-field" colspan="2">
<s:select list="{'PENDING','COMPLETED','EXCEPTION','CANCELLED'}" labelposition="top"/>
</td>
</tr>
INSP todoitem html
<tr>
<td class="td-label">
<s:label key="ToDoItem.assignedBy"/>
</td>
<td class="td-field">
<s:textfield name="booking.toDoItems[1].assignedBy" cssStyle="width:88%;" value="%{#session.user.userName}"
readonly="true" cssClass="readonly"></s:textfield>
</td>
<td class="td-label">
<s:label key="ToDoItem.assignedTo"/>
</td>
<td class="td-field">
<s:textfield name="booking.toDoItems[1].assignedTo" cssStyle="width:88%;" value="%{#session.user.userName}"
readonly="true" cssClass="readonly"></s:textfield>
</td>
我知道我在这里粘贴的代码有点大,但请耐心等待,我的问题是当我输入 todoitem 的字段时,例如 PDAS,INSP 的字段,然后提交表单,保存操作中的 todoitem 为空,例如当我循环待办事项并在保存操作中打印它,它得到以下日志:
22:23:04,923 INFO BookingAction:100 - Start save booking with
booking:com.chailie.booking.model.booking.Booking@726dad0
22:23:04,925 DEBUG BookingAction:104 - The todoitem is [null]
22:23:04,926 DEBUG BookingAction:104 - The todoitem is [null]
22:23:04,927 DEBUG BookingAction:104 - The todoitem is [null]
22:23:04,928 DEBUG BookingAction:104 - The todoitem is [null]
我知道这是因为 Action convert 指定的 todoitem 失败了,但是有人可以告诉我如何解决吗?我知道也许我可以编写一个自定义转换器来转换 List todoitem,但我不喜欢自定义转换器,然后是还有其他方法可以让 struts 帮助我转换这些指定的 ToDoItems 吗?