如何使用 Struts2 模型驱动将数据放入对象内的列表中
How to put data into a list inside a object using Struts2 ModelDriven
我正在做我的练习项目,遇到了一个问题。如何使用 ModelDriven 将我在 jsp 中输入的数据封装到对象内部的集合中。这是示例代码。
我调试了我的程序,它显示空值。我知道问题出在 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>
您的代码适用于列表,您可以使用 [n]
进行索引,因为列表已编入索引:
<s:textfield name="parts[1].quality" cssClass="form-control"/>
相反,它不适用于集合,因为集合没有索引。
您可以通过其属性之一索引集合(在本例中id
),如下所示:
在文件 OrderAction-conversion.properties
中指定 属性(在操作的同一文件夹中)格式为 KeyProperty_parts=id
。
注意:由于 parts
不是动作的集合,因此可能需要一些调整 ,而是动作的对象。
使用(n)
成语:
<s:textfield name="parts(1).quality" cssClass="form-control"/>
覆盖 hashCode()
和 equals()
。
在 the official documentation 上阅读所有扭曲的故事。
我正在做我的练习项目,遇到了一个问题。如何使用 ModelDriven 将我在 jsp 中输入的数据封装到对象内部的集合中。这是示例代码。
我调试了我的程序,它显示空值。我知道问题出在 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>
您的代码适用于列表,您可以使用 [n]
进行索引,因为列表已编入索引:
<s:textfield name="parts[1].quality" cssClass="form-control"/>
相反,它不适用于集合,因为集合没有索引。
您可以通过其属性之一索引集合(在本例中id
),如下所示:
在文件
OrderAction-conversion.properties
中指定 属性(在操作的同一文件夹中)格式为KeyProperty_parts=id
。
注意:由于parts
不是动作的集合,因此可能需要一些调整 ,而是动作的对象。使用
(n)
成语:<s:textfield name="parts(1).quality" cssClass="form-control"/>
覆盖
hashCode()
和equals()
。
在 the official documentation 上阅读所有扭曲的故事。