1

以下は、私の POJO、Action、および JSP ページです。

の単一のインスタンスについてはExpense、適切な入力を取得しています。

JSPページからModelDrivenの複数のインスタンスをフェッチするために使用したいと思います。Expense

そのために複数の を作成しましたが、クラス<div class="Expense">...</div>でどのような変更を加える必要があるかわかりません。Action

これを達成する方法は?

ポジョクラス:

public class Expense  implements java.io.Serializable {
     private Long id;
     private Client client;
     private String param;
     private BigDecimal value;
     private Date dt;
     private Date adddate;
     //getter and setter
}

アクション クラス:

public class ExpenxeAction extends ActionSupport implements ModelDriven<Expense> {

    Expense e = new Expense();
    ExpenseDAO dao = new ExpenseDAO();
    private LoginCheck lc = null;
    private List<Expense> expenseList = new ArrayList<Expense>();

    public String insertExpense() {
        dao.insert(e);
        return SUCCESS;
    }
   @Override
     public Expense getModel() {
    return e;
  }
}

JSP ページ:

 <div class="Expense">
    <label>Expense Type</label>
      <input type="text" name="param"  id="param"/>
     <label>Amount</label>
      <input type="text" name="value" class="form-control" id="value"/>
     <label>Date</label>
     <input type="text" name="dt" class="form-control"  id="dt"/>
   </div>
4

2 に答える 2

0

アクション クラスで Expense オブジェクトの配列リストを取得するには、コードに次の変更を加える必要があります。

  1. 必要に応じて、まず に変更ModelDriven<Expense>ModelDriven<List<Expense>>て削除するExpense e = new Expense();必要があります。したがって、最終的にアクション クラスは次のようになります。

    public class ExpenxeAction extends ActionSupport implements ModelDriven<List<Expense>>, Preparable {
        ExpenseDAO dao = new ExpenseDAO();
        private LoginCheck lc = null;
        private List<Expense> expenseList = new ArrayList<Expense>();
    
        public String insertExpense() {
            for (Expense e : expenseList) {     //loop to iterate over each elements
                dao.insert(e);
            }
            return SUCCESS;
        }
        public List<Expense> getExpenseList() {
            return expenseList;
        }
    
        public void setExpenseList(List<Expense> expenseList) {
            this.expenseList = expenseList;
        }   
    
       @Override
        public void prepare() throws Exception {
            expenseList = new ArrayList<Expense>(); 
        }
    
        @Override
        public List<Expense> getModel() {
            return expenseList;
        }
    }
    
  2. ここで、jsp ページに変更を加える必要があります。

    <div class="Expense">
        <label>Expense Type</label>
        <input type="text" name="model[0].param"  id="param"/>
        <label>Amount</label>
        <input type="text" name="model[0].value" class="form-control" id="value"/>
        <label>Date</label>
        <input type="text" name="model[0].dt" class="form-control"  id="dt"/>
    
        <label>Expense Type</label>
        <input type="text" name="model[1].param"  id="param"/>
        <label>Amount</label>
        <input type="text" name="model[1].value" class="form-control" id="value"/>
        <label>Date</label>
        <input type="text" name="model[1].dt" class="form-control"  id="dt"/>
    
        <label>Expense Type</label>
        <input type="text" name="model[2].param"  id="param"/>
        <label>Amount</label>
        <input type="text" name="model[2].value" class="form-control" id="value"/>
        <label>Date</label>
        <input type="text" name="model[2].dt" class="form-control"  id="dt"/>
    </div>
    

前述の jsp コードで、

model[index].<pojo_member_variable_name>を指定する代わりに lstExp[index].<pojo_member_variable_name>

これは、struts2 が値をこれらのメンバー変数に直接設定するようにしたいためです。model[index].<pojo__member_variable_name>そのため、struts2 が自動的に値をリストに設定するように言及しました。Expense上記のコードでは、3 つのオブジェクトのリストを作成しています。さらに値を挿入する必要がある場合は、インデックスをインクリメントして値を設定するだけで、残りは struts2 によって行われます。

于 2015-09-17T09:54:44.493 に答える
0

のゲッターを作成する必要がありますexpenseList

public List<Expense> getExpenseList() {
  return expenseList;
}

JSP では、インデックス付きのプロパティ名を使用します

<s:iterator value="expenseList" status="stat">
   <div class="Expense">
     <label>Expense Type</label>
     <s:textfield name="expenseList[%{#stat.index}].param"  id="param"/>
     <label>Amount</label>
     <s:textfield name="expenseList[%{#stat.index}].value" class="form-control" id="value"/>
     <label>Date</label>
     <s:textfield name="expenseList[%{#stat.index}].dt" class="form-control"  id="dt"/>
   </div>
</s:iterator>
于 2014-06-14T19:03:08.753 に答える