1

以下是我的 POJO、Action和 JSP 页面。

对于我得到正确输入的单个实例。Expense

我想用来从 JSP 页面ModelDriven获取多个实例。Expense

为此,我创建了多个<div class="Expense">...</div>,但我不知道我应该在Action课堂上进行哪些更改。

如何做到这一点?

Pojo类:

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

你应该为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 回答
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应该自动将值设置到列表中。在上面的代码中,我们创建了 3 个Expense对象的列表。如果您需要插入更多值,则只需增加索引并设置值,其余的将由 struts2 为您完成。

于 2015-09-17T09:54:44.493 回答