`

struts2 使用数组批量提交数据

 
阅读更多

首先是数组数据批量显示的问题。即由一个action到一个jsp页面怎么做?我以我自己写的代码为例。我在action中通过hibernate查到了一批数据,是一个list。即listCourseMsg。

 

 

arrayCourseMsg = listCourseMsg.toArray();//我把他转化成了数组
 

并且在这个action中添加了这个数组相应的get/set方法。

 

private Object[] arrayCourseMsg ;

	public Object[] getArrayCourseMsg() {
		return arrayCourseMsg;
	}

	public void setArrayCourseMsg(Object[] arrayCourseMsg) {
		this.arrayCourseMsg = arrayCourseMsg;
	}
 

然后这个数组就有了数据。内部是什么样的对象,下面说JSP的时候再说。下面是JSP页面的一部分:

 

<s:if test="arrayCourseMsg!=null">
                   <s:iterator value="arrayCourseMsg" status="stat">
                   <tr>
                   <td>
                   	<s:property value="%{arrayCourseMsg[#stat.index].msgTypeId}" />
                   	<s:hidden name="arrayCourseMsg[%{#stat.index}].id" value="%{arrayCourseMsg[#stat.index].id}" />
                   	<s:hidden name="arrayCourseMsg[%{#stat.index}].msgTypeId" value="%{arrayCourseMsg[#stat.index].msgTypeId}" />
                   </td>
                   <td>
                   <s:property value="%{arrayCourseMsg[#stat.index].msgTypeDescription}" />
                   <s:hidden name="arrayCourseMsg[%{#stat.index}].msgTypeDescription" value="%{arrayCourseMsg[#stat.index].msgTypeDescription}" />
                   </td>
                   <td>
                   	<s:property value="%{arrayCourseMsg[#stat.index].msgLogicId}" />
                   	<s:hidden name="arrayCourseMsg[%{#stat.index}].msgLogicId" value="%{arrayCourseMsg[#stat.index].msgLogicId}" />
                   </td>
                   <td>
                   	<s:checkbox name="arrayCourseMsg[%{#stat.index}].viaPm" fieldValue="true"></s:checkbox>
                   </td>
                   <td>
                   	<s:checkbox name="arrayCourseMsg[%{#stat.index}].viaEmail" fieldValue="true"></s:checkbox>
                   </td>
                   <td>
                   	<s:checkbox name="arrayCourseMsg[%{#stat.index}].viaSms" fieldValue="true"></s:checkbox>
                   </td>
                   <td>
                   <s:select list="#session[arrayCourseMsg[#stat.index].msgTypeId]" name="arrayCourseMsg[%{#stat.index}].defaultMsgId" listKey="msgId" listValue="msgPlainContent"></s:select>
                   </td>
                   </tr>
                   </s:iterator>
                   </s:if>

 这里主要是OGNL部分把我难住了,搞了很久。这里只说明一下s:select这个标签,因为这个不容易明白,(其他的不明白的,自己查一下ognl用法),一般要在页面中得到一个session应该是list="#session.SAMPLE", SAMPLE就是你在后台添加的session,arrayCourseMsg[#stat.index].msgTypeId得到的值就是一个session名。因为我在后台加了多个session.

 

还有一点,在其他标签中我这样用arrayCourseMsg[%{#stat.index}].viaSms来定义name。是为了修改这一系列的数据之后,提交给下一个action需要用到的。

这样做在页面中查看源码时:

 

name=arrayCourseMsg[0].viaSms

name=arrayCourseMsg[1].viaSms

这样的一系列值。

如果这样写的话arrayCourseMsg[#stat.index].viaSms :那么在页面中查看时,name就是:

arrayCourseMsg[#stat.index].viaSms

arrayCourseMsg[#stat.index].viaSms

再提交的时候,不容易定义name。

还有一点,像:

 

 

name=arrayCourseMsg[0].viaSms

 

name=arrayCourseMsg[1].viaSms

这样的一系列数组值,提交的时候,action怎么接收的问题?

下面是提交这样数据的时候,action类要做的:

1. 定义属性名以及set/get方法

private List<TrainingMessageTypes> arrayMessageTypes;

2. 实现这个接口implements ModelDriven 以及它的方法

 

public Object getModel() {

return arrayMessageTypes;

}

 

然后这个List--->arrayMessageTypes就能接收到所有的数组数据了。

 

 

 

 

 

 

1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics