struts2 多行数据提交问题 action该如何编写 比如 字段1, 字段2, 字段3, 字段4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 提交按扭 如何定义接收这些数组 如果能够指导一下DAO怎么写那就更好了(Hibernate)新手新手 。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只能是把各个对应的属性名设置为数组形式了,在页面中每个相同字段的数据都是同一个name,然后循环操作 怎么会需要提交这样的数据呢 ,你的一行对应数据库的一条记录么?我的了解是struts2的拦截器好像不能拦截这样的数据.(只能拦截map形式的,list好像不行)一种做法就是在action里面定义String 字段1 ;String 字段2;....然后你前台提交的时候要把所有字段1的拼接到一起,如拼接成 1,2,3,4,5;在提交.然后再在action里面处理下. 各位高手能否在给得详细点比如用list封装,在用map封装list怎么办? 楼主的这个业务要求可以先用一个类(TestProduct)封装那几个字段,然后再把TestProduct放到一个Map里(Map<String, TestProduct> products)。具体代码如下:products_ognl.jsp 这个产品录入界面:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><html> <head> <title>使用OGNL表达式进行类型转换</title> </head> <body> 字符串到Product的转换<p/> <form action="product.action" method="post"> <table border="1"> <tr> <td>产品1</td> <td> <s:textfield label="名称" name="products['product1'].name" /> <s:textfield label="价格" name="products['product1'].price" /> <s:textfield label="数量" name="products['product1'].count" /> </td> </tr> <tr> <td>产品2</td> <td> <s:textfield label="名称" name="products['product2'].name" /> <s:textfield label="价格" name="products['product2'].price" /> <s:textfield label="数量" name="products['product2'].count" /> </td> </tr> <tr> <td>产品3</td> <td> <s:textfield label="名称" name="products['product3'].name" /> <s:textfield label="价格" name="products['product3'].price" /> <s:textfield label="数量" name="products['product3'].count" /> </td> </tr> </table> <input type="submit" value="提交"/> </form> </body></html>TestProductAction.javapublic class TestProductAction extends ActionSupport { private Map<String, TestProduct> products; public String execute() throws Exception { TestProductDAO testProductDAO = new TestProductDAO(); testProductDAO.saveProducts(getProducts()); return SUCCESS; } public void setProducts(Map<String, TestProduct> products) { this.products = products; } public Map<String, TestProduct> getProducts() { return products; }}TestProduct.javapublic class TestProduct implements Serializable { private Long id = null; private String name; private float price; private int count; public TestProduct() {} public void setId(Long id) { this.id = id; } public Long getId() { return id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPrice(float price) { this.price = price; } public float getPrice() { return price; } public void setCount(int count) { this.count = count; } public int getCount() { return count; } }TestProductDAO.javapublic class TestProductDAO { public void saveProducts(Map<String, TestProduct> products) { Session session = null; Transaction tx = null; try { session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); for (TestProduct product : products.values()) { session.save(product); } tx.commit(); } catch (HibernateException e) { try { tx.rollback(); } catch (HibernateException rbe) { rbe.printStackTrace(); } } finally { HibernateSessionFactory.closeSession(); } }}productsview_ognl.jsp 这个是产品显示界面:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><html> <head> <title>显示Product的属性值</title> </head> <body> <table border="1"> <tr><td>产品</td><td>名称</td><td>价格</td><td>数量</td></tr> <s:iterator id="product" value="products"> <tr> <td>${product.key}</td> <td>${product.value.name}</td> <td>${product.value.price}</td> <td>${product.value.count}</td> </tr> </s:iterator> </table> </body> </html> 这个是struts2.0 多表单提交比较容易实现首先在action中定义一个容器比如List<Orderitem> orderItems=new ArrayList<Orderitem>();当然要给上get,set方法、Orderitem的po文件当然要有,hibernate自动生成呵呵。让后就是展现页面,比如jsp页面form中这么写<tr> <td>名称</td><td><input name="orderItems[1].itemname" value="xxx"></td></tr><tr> <td>名称</td><td><input name="orderItems[2].itemname" value="xxx2td></tr><tr> <td>名称</td><td><input name="orderItems[3].itemname" value="xxx3<td></tr>这样在Action中就可以给List容器赋上值了(反射机制)。当然既然可以拿到list容器了,所谓的增删改都很容易进行。dao很容易些,而且是用hibernate 只要有对象,session拿到,session.delete(obj)事物提交 就搞定一个对象可以搞定。那多个对象就也不在话下了。 首先先谢谢大家我大概能够理解了但是假定是表单的数目是不确定好比有一个按钮 可以添加行数字段1, 字段2, 字段3, 字段4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 提交按扭 添加行那这样写<input name="orderItems[X].itemname" value="xxx2td> X都是写死的可否有个更好的方案?那这样子又怎么办? LS的要求可以通过Struts2的标签和JS结合的方式来解决。前面几楼的各位高手已经都阐述了如何用Struts2标签实现固定行数的数据传递,动态添加行的基本思路和这个是一样的。如果你要在页面上实现添加一行,一般的思路首先是要通过JS给每一行指定一个递增的行ID,同样的思路,在指定行ID的时候,那个参数也可以对应填充到每个标签里面。 今天试着用一个list试着来接受我这样写 比如字段1, 字段2, 字段3, 字段4 1 1 1 1 2 2 2 2 action中我是这样写的list 字段1list 字段2……但是会爆出java.lang.NullPointerException何解?各位大侠 help me我做了一天了。。 崩溃ing 在jsp中的input我是这样写的(忽略表格)字段1 字段2<input name="字段1" value=""><input name="字段2" value=""><input name="字段1" value=""><input name="字段2" value=""> 我开始说不能拦截list类型很抱歉,没有具体操作就那样说了。这样写ation中list<String> list1;(这里list里面可以用其他类型)list<String> list2;确保有get set 方法。页面上 <input name="list1[0]" value=""> <input name="list[0]" value=""> <input name="list1[1]" " value=""> <input name=list[1]" value=""> .如果报空指针的话 将aciton里面的参数初始化list<String> list1= new ArrayList<String>();list<String> list2= new ArrayList<String>(); action中用一个list对应,方便以后做校验具体参照楼上们的方法 完成了也是用list的思路跟上面各位的差不多谢谢大家 请教 字符串比较大小 如何在网站添加背景音乐(要求在样式表中实现) 如何为自己的网站添加rss功能? 请问HttpSession session = request.getSession();这句话什么意思啊?干什么的? 新手上路:大家推荐一些学Java的资源阿!顺便散分! JSP上传问题. 分页程序,错误结果的原因!!! jsp调用bean时,bean中怎么获得当前bean所在的硬盘物理路径? 数据库中字段id递增问题?---在线等待 这段代码有什莫问题 关于JAVA精度的问题 java 判断服务器是否通外网?
String 字段1 ;
String 字段2;
....
然后你前台提交的时候要把所有字段1的拼接到一起,如拼接成 1,2,3,4,5;在提交.然后再在action里面处理下.
比如用list封装,在用map封装list怎么办?
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>使用OGNL表达式进行类型转换</title>
</head> <body>
字符串到Product的转换<p/>
<form action="product.action" method="post">
<table border="1">
<tr>
<td>产品1</td>
<td>
<s:textfield label="名称" name="products['product1'].name" />
<s:textfield label="价格" name="products['product1'].price" />
<s:textfield label="数量" name="products['product1'].count" />
</td>
</tr>
<tr>
<td>产品2</td>
<td>
<s:textfield label="名称" name="products['product2'].name" />
<s:textfield label="价格" name="products['product2'].price" />
<s:textfield label="数量" name="products['product2'].count" />
</td>
</tr>
<tr>
<td>产品3</td>
<td>
<s:textfield label="名称" name="products['product3'].name" />
<s:textfield label="价格" name="products['product3'].price" />
<s:textfield label="数量" name="products['product3'].count" />
</td>
</tr>
</table>
<input type="submit" value="提交"/>
</form>
</body>
</html>TestProductAction.javapublic class TestProductAction extends ActionSupport {
private Map<String, TestProduct> products;
public String execute() throws Exception {
TestProductDAO testProductDAO = new TestProductDAO();
testProductDAO.saveProducts(getProducts());
return SUCCESS;
} public void setProducts(Map<String, TestProduct> products) {
this.products = products;
} public Map<String, TestProduct> getProducts() {
return products;
}
}TestProduct.javapublic class TestProduct implements Serializable {
private Long id = null;
private String name;
private float price;
private int count;
public TestProduct() {}
public void setId(Long id) {
this.id = id;
} public Long getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setPrice(float price) {
this.price = price;
} public float getPrice() {
return price;
} public void setCount(int count) {
this.count = count;
} public int getCount() {
return count;
}
}TestProductDAO.javapublic class TestProductDAO { public void saveProducts(Map<String, TestProduct> products) { Session session = null;
Transaction tx = null; try { session = HibernateSessionFactory.getSession();
tx = session.beginTransaction(); for (TestProduct product : products.values()) {
session.save(product);
} tx.commit();
} catch (HibernateException e) {
try {
tx.rollback();
} catch (HibernateException rbe) {
rbe.printStackTrace();
}
} finally {
HibernateSessionFactory.closeSession();
} }
}productsview_ognl.jsp 这个是产品显示界面:<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>显示Product的属性值</title>
</head> <body>
<table border="1">
<tr><td>产品</td><td>名称</td><td>价格</td><td>数量</td></tr>
<s:iterator id="product" value="products">
<tr>
<td>${product.key}</td>
<td>${product.value.name}</td>
<td>${product.value.price}</td>
<td>${product.value.count}</td>
</tr>
</s:iterator>
</table>
</body>
</html>
首先在action中定义一个容器比如List<Orderitem> orderItems=new ArrayList<Orderitem>();
当然要给上get,set方法、Orderitem的po文件当然要有,hibernate自动生成呵呵。
让后就是展现页面,比如jsp页面form中这么写
<tr>
<td>名称</td><td><input name="orderItems[1].itemname" value="xxx"></td>
</tr>
<tr>
<td>名称</td><td><input name="orderItems[2].itemname" value="xxx2td>
</tr>
<tr>
<td>名称</td><td><input name="orderItems[3].itemname" value="xxx3<td>
</tr>这样在Action中就可以给List容器赋上值了(反射机制)。
当然既然可以拿到list容器了,所谓的增删改都很容易进行。
dao很容易些,而且是用hibernate 只要有对象,session拿到,session.delete(obj)事物提交 就搞定
一个对象可以搞定。那多个对象就也不在话下了。
我大概能够理解了
但是假定是表单的数目是不确定
好比有一个按钮 可以添加行数
字段1, 字段2, 字段3, 字段4
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
提交按扭
添加行那这样写
<input name="orderItems[X].itemname" value="xxx2td> X都是写死的
可否有个更好的方案?
那这样子又怎么办?
前面几楼的各位高手已经都阐述了如何用Struts2标签实现固定行数的数据传递,动态添加行的基本思路和这个是一样的。
如果你要在页面上实现添加一行,一般的思路首先是要通过JS给每一行指定一个递增的行ID,同样的思路,在指定行ID的时候,那个参数也可以对应填充到每个标签里面。
我这样写 比如
字段1, 字段2, 字段3, 字段4
1 1 1 1
2 2 2 2 action中我是这样写的list 字段1
list 字段2
……
但是会爆出
java.lang.NullPointerException
何解?
各位大侠 help me
我做了一天了。。
崩溃ing
字段1 字段2
<input name="字段1" value=""><input name="字段2" value="">
<input name="字段1" value=""><input name="字段2" value="">
ation中
list<String> list1;(这里list里面可以用其他类型)
list<String> list2;
确保有get set 方法。
页面上
<input name="list1[0]" value=""> <input name="list[0]" value="">
<input name="list1[1]" " value=""> <input name=list[1]" value=""> .
如果报空指针的话 将aciton里面的参数初始化
list<String> list1= new ArrayList<String>();
list<String> list2= new ArrayList<String>();
也是用list的
思路跟上面各位的差不多
谢谢大家