0

有谁知道如何在不使用任何自定义转换器的情况下在 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 吗?

4

1 回答 1

0

我的问题已经解决了,我刚刚定义了一个拦截器来用 PDAS、INSP 等实例化 List toDoItems,然后将其设置为 valuestack。因为我已经实例化了 toDoItem,struts 只会直接使用这个现有的 toDoItems,不会再创建它,然后问题就解决了

于 2013-04-18T14:12:45.470 回答