Struts 2.0 - 通过模型驱动获取多个数据

时间:2013-08-27 15:11:15

标签: struts2 model-driven

我有jsp页面,其中包含以下详细信息

<s:form>

输入fname:
输入lname:

地址1:

输入城市:
输入Pin:

地址2:

输入城市:
输入Pin:

地址3:

输入城市:
输入Pin:

</s:form>

现在我需要使用模型驱动功能将所有条目提取到单个DTO对象中。

但是我如何获得多个地址字段条目。 DTO类将为每个地址字段(即city和pin)包含相同的内容。例如:DTO类看起来像:

public class Details {

String fname;
String lname;
String city;
String pin;

public String getFname() {
    return fname;
}
public void setFname(String fname) {
    this.fname = fname;
}
public String getLname() {
    return lname;
}
public void setLname(String lname) {
    this.lname = lname;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
public String getPin() {
    return pin;
}
public void setPin(String pin) {
    this.pin = pin;
}
}

或者我只有在使用

时才能获得它们
String[] city;
String[] pin;

输入标签的名称应该是什么。会不会是

<input type="text" name="city" /> for all city entries 

是否有其他选项可以获得多个条目。

1 个答案:

答案 0 :(得分:2)

如果我们假设您的表单如下所示:

public class MyForm {
    private List<Details> addresses;
    private String fname;
    private String lname;

    public List<Details> getAddresses() {
        return this.addresses;
    }

    public void setAddresses(List<Details> addresses) {
        this.addresses = addresses;
    }

    /*

    getters and setters for fname and lname properties;    

    */
}

并且您正在实施ModelDriven的操作如下所示:

public class MyAction extends ActionSupport implements ModelDriven<MyForm> {
     private MyForm myForm = new MyForm();

     public String execute() {
          /*

          ....


          */
     }

     @Override
     public MyForm getModel() {
          return this.myform;
     }
}

在JSP文件中,您可以按如下方式设置这些值:

<%@ taglib prefix="s" uri="/struts-tags"%>
<s:form action="your_action" method="post">

输入fname:<s:textfield name="fname"/>
输入lname:<s:textfield name="lname"/>

地址1:

输入城市:<s:textfield name="addresses[0].city"/>
输入Pin:<s:textfield name="addresses[0].pin"/>

地址2:

输入城市:<s:textfield name="addresses[1].city"/>
输入Pin:<s:textfield name="addresses[1].pin"/>

地址3:

输入城市:<s:textfield name="addresses[2].city"/>
输入Pin:<s:textfield name="addresses[2].pin"/>

</s:form>