如何使用Struts2 ModelDriven将数据放入对象内的列表中

时间:2016-07-21 22:42:57

标签: java collections struts2 set model-driven

我正在做我的练习项目并遇到问题。如何使用ModelDriven将在jsp中输入的数据封装到对象内部的集合中。这是示例代码。

我调试了我的程序,它显示了null值。我知道问题出在jsp内部,但我不知道如何解决它。

订单:

public class Order {
    private int id;
    private Date createDate;
    private Date requestDate;
    private double totalCost;
    private String status;
    private Vehicle vehicle;        //contains car info

    private Set<Part> parts = new HashSet<>();         
    //setters and getters
}

部分:

public class Part {
    private int id;
    private int quality;
    private double laborCost;
    private int status;

    //setters and getters
}

我的行动代码:

public class OrderAction extends ActionSupport implements ModelDriven<Order>{

    private Order order = new Order();
    public Order getOrder() {return order;}
    public void setOrder(Order order) {this.order = order;}

    @Override
    public Order getModel() { return order;}

    public String addOrder(){
    try{
        orderSerive.addOrder(order);
    }catch (Exception e){
        return LOGIN;
    }
    return "home";
}

我的jsp页面示例:

<div class="form-group" id="part1">
    <s:label value="1" cssClass="col-md-1 col-sm-1 col-xs-4 col-md-offset 1"/>
    <div class="col-md-6 col-sm-6 col-xs-12">
        <s:textfield cssClass="form-control" id="partModel"/>
    </div>
    <div class="col-md-2 col-sm-2 col-xs-4 col-md-offset-1">
        <s:textfield name="parts[1].quality" cssClass="form-control"/>
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

您的代码适用于List,您可以使用[n]进行索引,因为List已被编入索引:

<s:textfield name="parts[1].quality" cssClass="form-control"/>

它不适用于Set,相反,因为Set没有索引。

您可以通过其中一个属性(在本例中为id)对一个Set进行索引,如下所示:

  1. 使用格式OrderAction-conversion.properties指定文件KeyProperty_parts=id中的属性(在操作的同一文件夹中)。
    注意:由于parts不是动作的集合,而是行动的对象,因此可能需要某些调整

  2. 使用(n)成语:

    <s:textfield name="parts(1).quality" cssClass="form-control"/>
    
  3. 覆盖hashCode()equals()

  4. 阅读the official documentation上所有扭曲的故事。