使用Struts2向List添加对象

时间:2013-11-04 03:48:05

标签: java forms jsp struts2

我是使用struts2框架的新手,并且对它有些困惑。我有一个提交给动作类的表单。我希望提交的字段保存到客户列表列表中。在动作类中我声明了一个List,定义了getModel方法以返回Customer的List,并在prepare方法中(我不确定这是否正确)我将对象添加到列表中

JSP

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Add Account </title>
</head>
<body>
   <h2>
            Customer details
   </h2>
<s:form action="AddCustomerAction" name="/example" method="post">
    <h1>
        <s:textfield label="Enter First Name" name="firstName" key="firstName" required="true" size="25"/>
    </h1>
    <h1>
        <s:textfield label="Enter Last Name" name="lastName" required="true" size="25" />
    </h1>

    <h1>
        <s:textfield label="Enter Address" name="address" required="true" size="25" />
    </h1>
    <h1>
       <s:select value ="state" name="state" list="stateList" label="Select State" listKey="code" listValue="desc" required="true"/>
    <h1>
    <h1>
        <s:textfield label="Enter City" name="city" required="true" size="25" />
    </h1>
    <h1>
        <s:textfield label="Enter Zipcode" name="zipcode" required="true" size="25" />
    </h1>

     <h1>
        <s:submit name="OK"/>
     </h1>
     </s:form>
</body>

动作类

package example;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.util.ArrayList;
import java.util.List;

public class AddCustomerAction extends ActionSupport implements ModelDriven{

private Customer customer = new Customer();
private List<Customer> customerList;

public List<Customer> getModel()
{
    return customerList;
}

public String execute()
{
    this.printCustomer();
    return SUCCESS;
}

public void prepare(){
    customerList = new ArrayList<Customer>();
    customerList.add(new Customer("first", "last"));
}


private void printCustomer(){
    System.out.println("First Name = "+customer.getFirstName());
    System.out.println("Last Name = "+customer.getLastName());
    System.out.println("Add = "+customer.getAddress());
    System.out.println("State = "+customer.getState());
    System.out.println("City = "+customer.getCity());
    System.out.println("Zipcode = "+customer.getZipcode());    
}

在动作类中,我想保存从客户列表中的表单提交的信息,以便我可以迭代它并显示数据。

当我运行它时,firstname和lastName为null(即使我输入了值)。

是我的方法(设置getModel()和prepare(),因为我有)正确吗?我错过了什么?

2 个答案:

答案 0 :(得分:1)

问题在于List<Customer>。您的表单提交了Customer而不是客户列表。 所以

public Object getModel()
{
    return customerList;
}

如果您想获得客户列表,您还必须更改您的jsp。

另外,要使用ModelDriven操作,请确保将Model Driven Interceptor应用于您的操作。

答案 1 :(得分:0)

<s:textfield label="Enter First Name" name="firstName" key="firstName" required="true" size="25"/>

此字段的名称是firstName,因此,它需要名为firstName

的属性/字段的getter / setter

为了使用请求中的参数让客户bean填满您的操作,请将名称更改为customer.firstName

然后你需要一个customer字段的setter,你已经有了。

这里唯一的假设是您需要在您的客户类中设置一个名为firstName的字段,但是查看customer.getFirstName()我猜您的firstName中有一个名为customer的字段{1}} bean。

我试着很清楚地解释一下参数如何从请求到行动的映射,如果你什么都不懂,请告诉我。