xrcwrn
xrcwrn

Reputation: 5327

How to fetch Data in ArrayList using ModelDriven

Following are my POJO, Action, and JSP page.

For single instance of Expense I'm getting proper input.

I would like to use ModelDriven to fetch multiple instance of Expense from JSP page.

For that I have created multiple <div class="Expense">...</div>, but I dont know what changes should I made in Action class.

How to achieve this?

Pojo Class:

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
}

Action Class:

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 page:

 <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>

Upvotes: 0

Views: 759

Answers (2)

singhpradeep
singhpradeep

Reputation: 1733

To fetch array list of Expense objects in action class you need to make the following changes to your code.

  1. First you have to change ModelDriven<Expense> to ModelDriven<List<Expense>> and remove Expense e = new Expense();, if you wish. So, finally your action class should look like this.

    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. Now, you have to make changes to your jsp page.

    <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>
    

You will notice that in the jsp code we have mentioned

model[index].<pojo_member_variable_name> instead of specifying of lstExp[index].<pojo_member_variable_name>

This is because now we want struts2 to set the values directly into these member variables. So we have mentioned model[index].<pojo__member_variable_name> so that struts2 should automatically set the value into the list. Here in the above code we are creating list of 3 Expense Object. If you need to insert more values then just increment the index and set the values and remaining will be done by struts2 for you.

Upvotes: 0

Roman C
Roman C

Reputation: 1

You should create a getter for expenseList

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

in the JSP use indexed property names

<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>

Upvotes: 0

Related Questions