actionform里面存放list属性(list中存放每一条都是有效记录对象)可以比较容易的完成多行表单
数据的显示工作,但是反过来页面上的对应数据却无法提交给List中的记录对象。有人做过类似的工
作么?如果解决?
---------------------------------------------------------------
通过数组可以做的,
public class XXXForm ...{
private String names[];
}
页面:
<html:select property="names" multiple="true">
...
</html:select>
---------------------------------------------------------------
struts最后还是要通过Form里的域比如<input type="text"之类进行提交。
struts能做的只是自动将这些数据收集到Form里对应的变量中。
能利用的一个对应是Checkbox,Struts做了一个数组可以收集。
我的建议:将List每一行都加一个checkbox, 其值为键值。
这样就可以在Form中得到一个键值的数组,一般够用了。
---------------------------------------------------------------
checkbox是可以实现的,常用的就是放一个ID在checkbox里。不过如果每一行所有数据都要提交回去
的话。
我想可以用多个hidden对应每个相同的属性,名字一样就行了,提交回去后,就有了多个相同属性的
数组。
不过我没有用过,只是想了想,不知对不?
学习中~~~~~~~~~~~~~~~~
---------------------------------------------------------------
不可以,这个问题我遇到过,我已经解决了,呵呵
需要这个样子的:当你提交上来的数据需要在form里面定义需要提交上来的数组,一般都是用String
a[]这种形势,这样就可以提交,然后自己写一个方法,把提交上来的数据重新初始化为自己想要得类
。嘿嘿,我那个项目就是这样解决的,目前正常运行没有问题
例如:
class A {
private String name;
private String address;
}
class form{
A[] test = null;
String[] name = null;//A类里面需要提交上来的数据
}
然后再Action的setFormToBean()方法里面根据上传上来的name重新创建A类的实例数组
---------------------------------------------------------------
应该是不可以的,struts如何知道你需要获得的对象类型?
webwork是通过以下方式解决这个问题的:
//
private List listData = new XWorkList(XXXData.class);
//
也许新版本的struts中会有?
---------------------------------------------------------------
没试过,我们都用数组。
---------------------------------------------------------------
这样你可以通过两上formbean来处理,一个是专门用来处理你列表中的信息的A,一个专来用来处理其
它页面信息B(主从表),在B中用一个属性private ArrayList aList=new AutoArrayList
(A.class);
AutoArrayList是继承了ArrayList的类,其中构造函数的一个参数为AutoArrayList(Class iTem),这
样是利用反射了吧!!在其中有一个方法
public Object get(int index) {
try {
while (index >= size()) {
add(itemClass.newInstance());
}
} catch (Exception e) {
e.printStackTrace();
}
return super.get(index);
}
是用来处理类组的吧!!
页面上通过
<logic:iterate id="aList" name="B" property="aList" indexId="index">
<html:text name="aList" property="A中的属性" indexed="true"/>
</logic:iterage>
这样aList就会与B表中的aList对应了,其中<html:text/>中的名都成了aList[].A表中的属性了,于
是也变成了数据处理了!事实上有点象处理Hibernate中的many-to-one那种吧!
以上是我的一些小认识大家多讨论啦!!
---------------------------------------------------------------
可以结合javascript来做,把grid的信息组成一个xml或者string,然后以hidden字段的形式提交到
server端,再对xml或者string进行解析。
---------------------------------------------------------------
学习
---------------------------------------------------------------
likeBean(喜欢吃咖啡豆) 说得是个好办法,现在项目中就这么用。
---------------------------------------------------------------
偶系新人
不知道我的方法好不好用。我以前做过这样的问题。你有没有考虑到用hidden来做做看呢
---------------------------------------------------------------
关注
---------------------------------------------------------------
碰巧刚做完一个项目就是list提交的,日月的方法是正确的,那个构造函数不是必需的,改写的
arrayList如下
public class Sk0007S001Bean extends ArrayList {
private static FcLoggerInterface mylogger =
FcLoggerFactory.getLogger("Sk0007S001Bean");
private Sk0007S000Bean sk0007S000Bean = null;
public Sk0007S001Bean(Sk0007S000Bean sk0007S000Bean) {
String METHOD_NAME = "Sk0007S001Bean";
mylogger.methodTrace(METHOD_NAME, FcMsg.START);
this.sk0007S000Bean = sk0007S000Bean;
mylogger.methodTrace(METHOD_NAME, FcMsg.END);
}
public Object get(int index) {
String METHOD_NAME = "get";
mylogger.methodTrace(METHOD_NAME, FcMsg.START);
while (index >= size()) {
/*初期化*/
add(new Sk0007S000Bean());
}
mylogger.methodTrace(METHOD_NAME, FcMsg.END);
return super.get(index);
}
}
---------------------------------------------------------------
DynaActionForm只支持固定长度的collection,所以我是这么做的:
==================================================
struts-config.xml中的formBean
<form-bean name="cityInfoActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="set_id" type="java.lang.String[]" />
<form-property name="setName" type="java.lang.String[]" />
<form-property name="setType" type="java.lang.String[]" />
<form-property name="address" type="java.lang.String[]" />
<form-property name="setTel" type="java.lang.String[]"/>
<form-property name="i1c_id" type="java.lang.String"/>
<form-property name="type" type="java.lang.String"/>
</form-bean>
=============================================
action
DynaActionForm cityInfo_af=(DynaActionForm)actionForm;
String[] setName=cityInfo_af.getStrings("setName");
String[] setType=cityInfo_af.getStrings("setType");
String[] address=cityInfo_af.getStrings("address");
String[] setTel=cityInfo_af.getStrings("setTel");
for(int i=0;i<setName.length;i++)
{
CityInfo cityInfo=new CityInfo();
cityInfo.setItem1Class(i1c);
cityInfo.setType(type);
cityInfo.setLanguage(language);
cityInfo.setSetName(setName[i]);
cityInfo.setSetType(setType[i]);
cityInfo.setAddress(address[i]);
cityInfo.setSetTel(setTel[i]);
cityInfoDAOImpl.insert(cityInfo);
}
=====================================================
JSP页面
<%@ page contentType="text/html; charset=utf-8" errorPage="/error.jsp" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<logic:notPresent name="adminBean" scope="session">
<logic:forward name="error"/>
</logic:notPresent>
<bean:parameter name="type" id="type"/>
<bean:parameter name="i1c_id" id="i1c_id"/>
<html>
<body>
<TABLE width="100%" cellPadding=2 cellSpacing=1 bgcolor="#CACADB" id=t136>
<tr align="center" bgcolor="#E4E7EF">
<td height="20">
<bean:message key="city.set.form.setName"/>
</td>
<td>
<logic:equal name="type" value="food">
<bean:message key="city.set.form.food.setType"/>
</logic:equal>
<logic:notEqual name="type" value="food">
<bean:message key="city.set.form.yule.setType"/>
</logic:notEqual>
</td>
<td>
<logic:equal name="type" value="traffic">
<bean:message key="hotel.form.intro"/>
</logic:equal>
<logic:notEqual name="type" value="traffic">
<bean:message key="golf.form.address"/>
</logic:notEqual>
</td>
<td>
<bean:message key="hotel.form.tel"/>
</td>
<td>
<a href="javascript:void(0)" οnclick=addNew()>
添加项目
</a>
</td>
</tr>
<form action="/admin/cityInfoAdd.do" method="post">
<input type="hidden" name="type" value="<bean:write name="type"/>">
<input type="hidden" name="i1c_id" value="<bean:write name="i1c_id"/>">
<tr align="center" bgcolor="#ffffff">
<td>
<input type="text" name="setName" size="10">
</td>
<td>
<input type="text" name="setType" size="10">
</td>