困扰了我两天的问题,有这么个需求
产品跟产品的计量单位是1对多的关系,要求在新增产品的时候,顺便把这个产品的多个计量单位也保存到数据库产品modelpublic class ProductModel
{
private Integer productid;
private String productno;
private String productname;
private List<ProductUnitModel> productunits = new ArrayList();
// set get 方法略}产品计量单位model
public class ProductUnitModel
{
private Integer productunitid;
private String productunitname;
private BigDecimal productunitre;
//set get 方法略
}ProductModel 的hibernate配置文件 就是 一对多 “一”的那一方
<hibernate-mapping package="com.dfgg.sms.model">
<class name="ProductModel" table="DPC_Product">
<id name="productid" column="product_id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<property name="productno" column="product_no" type="java.lang.String"></property>
<property name="productname" column="product_name" type="java.lang.String"></property>
<list name="productunits" table="DPC_ProductUnit" cascade="save-update">
<key column="product_id" not-null="true"></key>
<index column="productunit_idx" type="java.lang.Integer"></index>
<one-to-many class="com.dfgg.sms.model.ProductUnitModel"></one-to-many>
</list>
</class>
</hibernate-mapping>struts2当中的action
product action
public class ProductAction extends ActionSupport
{
private ProductModel product;
//set get 方法略
}新增产品的jsp页面,我做了一个动态添加表格行
<tr><td><input name="product.productunits[0].productunitname"><input name="product.productunits[0].productunitre"></td><tr>
<tr><td><input name="product.productunits[1].productunitname"><input name="product.productunits[1].productunitre"></td><tr>
<tr><td><input name="product.productunits[2].productunitname"><input name="product.productunits[2].productunitre"></td><tr>
<tr><td><input name="product.productunits[3].productunitname"><input name="product.productunits[3].productunitre"></td><tr>
<tr><td><input name="product.productunits[4].productunitname"><input name="product.productunits[4].productunitre"></td><tr>
如果用户看到写错了,还可以在删除这个行,
<tr><td><input name="product.productunits[0].productunitname"><input name="product.productunits[0].productunitre"></td><tr>
<tr><td><input name="product.productunits[1].productunitname"><input name="product.productunits[1].productunitre"></td><tr>
<tr><td><input name="product.productunits[2].productunitname"><input name="product.productunits[2].productunitre"></td><tr>
<tr><td><input name="product.productunits[4].productunitname"><input name="product.productunits[4].productunitre"></td><tr>删除之后,这个list的索引就不按0 1 2 3 4这么排列了。导致我用hibernate存到数据库中是,这个list的索引字段顺序被打乱 如下图我再在修改产品的页面用el表达式循环输出这个产品对应的多个计量单位的时候,hibernate从数据库是按索引给我读出,明明只有0 1 2 4 这么4条数据,hibernate会给我读出5条数据,分别是0 1 2 3 4 ,3是空。这样我在页面上循环显示的时候就有个空我该怎么办啊
产品跟产品的计量单位是1对多的关系,要求在新增产品的时候,顺便把这个产品的多个计量单位也保存到数据库产品modelpublic class ProductModel
{
private Integer productid;
private String productno;
private String productname;
private List<ProductUnitModel> productunits = new ArrayList();
// set get 方法略}产品计量单位model
public class ProductUnitModel
{
private Integer productunitid;
private String productunitname;
private BigDecimal productunitre;
//set get 方法略
}ProductModel 的hibernate配置文件 就是 一对多 “一”的那一方
<hibernate-mapping package="com.dfgg.sms.model">
<class name="ProductModel" table="DPC_Product">
<id name="productid" column="product_id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<property name="productno" column="product_no" type="java.lang.String"></property>
<property name="productname" column="product_name" type="java.lang.String"></property>
<list name="productunits" table="DPC_ProductUnit" cascade="save-update">
<key column="product_id" not-null="true"></key>
<index column="productunit_idx" type="java.lang.Integer"></index>
<one-to-many class="com.dfgg.sms.model.ProductUnitModel"></one-to-many>
</list>
</class>
</hibernate-mapping>struts2当中的action
product action
public class ProductAction extends ActionSupport
{
private ProductModel product;
//set get 方法略
}新增产品的jsp页面,我做了一个动态添加表格行
<tr><td><input name="product.productunits[0].productunitname"><input name="product.productunits[0].productunitre"></td><tr>
<tr><td><input name="product.productunits[1].productunitname"><input name="product.productunits[1].productunitre"></td><tr>
<tr><td><input name="product.productunits[2].productunitname"><input name="product.productunits[2].productunitre"></td><tr>
<tr><td><input name="product.productunits[3].productunitname"><input name="product.productunits[3].productunitre"></td><tr>
<tr><td><input name="product.productunits[4].productunitname"><input name="product.productunits[4].productunitre"></td><tr>
如果用户看到写错了,还可以在删除这个行,
<tr><td><input name="product.productunits[0].productunitname"><input name="product.productunits[0].productunitre"></td><tr>
<tr><td><input name="product.productunits[1].productunitname"><input name="product.productunits[1].productunitre"></td><tr>
<tr><td><input name="product.productunits[2].productunitname"><input name="product.productunits[2].productunitre"></td><tr>
<tr><td><input name="product.productunits[4].productunitname"><input name="product.productunits[4].productunitre"></td><tr>删除之后,这个list的索引就不按0 1 2 3 4这么排列了。导致我用hibernate存到数据库中是,这个list的索引字段顺序被打乱 如下图我再在修改产品的页面用el表达式循环输出这个产品对应的多个计量单位的时候,hibernate从数据库是按索引给我读出,明明只有0 1 2 4 这么4条数据,hibernate会给我读出5条数据,分别是0 1 2 3 4 ,3是空。这样我在页面上循环显示的时候就有个空我该怎么办啊
解决方案 »
- 关于Jsp和servlet的问题
- 求教下JSON的时间的问题
- 前辈们,帮我看看我这个水平能要多少钱一个月
- <新手问题>hibernate如何用外键进行查找?
- [求解]JAVA EE 用struts2 通过数据库实现登录实例出现问题
- log4j如何将不同级别的log,输出到不同的文件中
- MyEclipse5.5 mysql5.0 structs1.2 登录报空指针异常 NullPointerException
- 无法执行JSP文件了,请教啊
- 为什么找不到在ejb中设置的参数?
- 请教大家,怎样将XML文档里的数据插入到数据库。
- servlet 连接数据库分页查询语句 在oracle中
- 如何把数据保存为树形结构
当然你也可以自己写个标签专门迭代类似的list