form提交多行(c:forEach循环出来的)数据到action,然后更新到数据库中(急)

Black_Element 2014-07-30 04:25:19
第一问:

一个表中的字段通过c:forEach循环出来到页面,可以进行批量编辑



然后通过form表单提交到action中



请问如何让action获取到所有提交的表单数据?list?

--------------------------------------------------------------------------------------------

第二问:

提交后,如何批量将修改的数据保存到数据库中?

SpringMvc 、Mysql、Mybatis的环境


相关代码:

接口:
public void SigninRewardUpdate(List<SigninReward>list);

XML:
<update id="SigninRewardUpdate">
UPDATE t_earn_signin_reward
<trim prefix="set" suffix=",">
<trim prefix="name = case" suffix="end,">
<foreach collection="list" item="obj" index="index">
<if test="obj.name!=null">
when (name=#{obj.name})
</if>
</foreach>
</trim>
<trim prefix="icon = case" suffix="end,">
<foreach collection="list" item="obj" index="index">
<if test="icon!=null">
when (icon=#{obj.icon})
</if>
</foreach>
</trim>
<trim prefix="coin = case" suffix="end,">
<foreach collection="list" item="obj" index="index">
<if test="coin!=null">
when (coin=#{obj.coin})
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="obj" index="index">
(id=#{obj.id})
</foreach>
</update>


页面:

<form id="J_Form" action="updatedaily.do" method="post" class="form-horizontal">
<div class="control-group">
<label class="control-label">
<s>*</s>活动名称:
</label>
<div class="controls">
<input name="coinid" type="hidden" value="${objid.id }" >
<input name="coinname" type="text" class="input-large"
data-rules="{required : true}" value="${objid.name }" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<s>*</s>活动简介:
</label>
<div class="controls">
<input name="coindescription" type="text" class="input-large"
data-rules="{required : true}" value="${objid.description }" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<s>*</s>活动详情:
</label>
<div class="controls control-row-auto">
<textarea name="coinintroduction" class="control-row4 input-large"
style="width: 550px;">${objid.introduction }</textarea>
</div>
</div>
<div class="control-group">
<label class="control-label">
签到奖励:
</label>
<div class="controls control-row-auto">
<c:forEach var="obj" varStatus="index" items="${list}">
<div class="panel" style="width: 550px; height: 180px;">
<div class="panel-body">
<input type="radio">
 
<label>
签到类型:
</label>
${obj.rewardType }
<br />
<br />
<div style="position: absolute; left: 151px;">
<label>
签到名称:
</label>
<input type="text" name="name" value="${obj.name }">
<br />
<br />
<label>
赠送Q币:
</label>
<input type="text" name="coin" value="${obj.coin }">
 
<br />
<br />
<img src="${obj.icon }" width="50" height="30" name="icon"/>
  
<input type="file" name="icon" value="1000" />
</div>
</div>
</div>
</c:forEach>
</div>
</div>
<div class="row actions-bar">
<div class="form-actions span13 offset3">
<button type="submit" class="button button-primary">
保存
</button>
<button type="reset" class="button">
重置
</button>
</div>
</div>
</form>


Action:
@RequestMapping(value = "updatedaily", method = RequestMethod.POST)
public String updateDaily(int coinid, String coinname,
String coinintroduction, String coindescription, CoinTask coinTask,
SigninReward signinReward) {
coinTask.setId(coinid);
coinTask.setName(coinname);
coinTask.setIntroduction(coinintroduction);
coinTask.setDescription(coindescription);
coinTaskService.updateCoinName(coinTask);
// signinRewardService.SigninRewardUpdate(list);
return Constants.REDIRECT + ":/activity/queryid.do";
}


因为之前都是修改单个字段,这一下批量更新多个字段有点模糊了,思路有点不清晰,网上的资料也不全,如果有demo的更好了,谢谢
...全文
1392 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhang_qiankun 2014-07-31
  • 打赏
  • 举报
回复
你可以将用到的属性 在后台写个bean对象 这样前台执行表单的时候 就会每个对象的值了
小灯光环 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 u013435349 的回复:
[quote=引用 5 楼 wlwlwlwl015 的回复:] 笔误笔误,obj[index.index].name ,表示提交你循环的第N个对象的name属性的值。
嗯嗯,我先将页面的存到数组里,Action哩循环读取每个下标的字段,然后一条条的更新[/quote] 大致是这样,更新之前可以判断一下有没有变化,有变化则更新,没变化就不做任何操作。
Black_Element 2014-07-30
  • 打赏
  • 举报
回复
引用 5 楼 wlwlwlwl015 的回复:
笔误笔误,obj[index.index].name ,表示提交你循环的第N个对象的name属性的值。
嗯嗯,我先将页面的存到数组里,Action哩循环读取每个下标的字段,然后一条条的更新
小灯光环 2014-07-30
  • 打赏
  • 举报
回复
笔误笔误,obj[index.index].name ,表示提交你循环的第N个对象的name属性的值。
Black_Element 2014-07-30
  • 打赏
  • 举报
回复
引用 2 楼 wlwlwlwl015 的回复:
更新列表,这个问题经常出现啊。 很简答,结合JSTL的隐式对象,你可以取到每次提交对象的下标,然后在Action中定义一个对象的List去接收数据就可以了。 举个栗子: <input type="text" name="obj.name[index.index]" value="${obj.name }"> 1.obj是对象名,你属性这么多,不可能定义一堆String数组吧,还是封装成对象传递到后台。 2.index.index 第一个index就是你上面定义的varStatus,每次错的话varStatus这个隐式对象的值:index就表示当前循环对象的索引号。 OK,这样你在后台顶一个数组或者List,就可以完整接收你通过列表提交的数据了。
嗯嗯,有点思路了
whos2002110 2014-07-30
  • 打赏
  • 举报
回复
list数据往后面发比较麻烦, 不能直接用List接收,要以某个对象的List型属性接收。 如:控制层接收对象为a,有个list属性b, 你页面通过b[0].xxx、b[1].xxx往b这个list中添值。 你也可以在页面发起多次保存请求, 每次保存一条记录, 这样处理方便一点。
小灯光环 2014-07-30
  • 打赏
  • 举报
回复
更新列表,这个问题经常出现啊。 很简答,结合JSTL的隐式对象,你可以取到每次提交对象的下标,然后在Action中定义一个对象的List去接收数据就可以了。 举个栗子: <input type="text" name="obj.name[index.index]" value="${obj.name }"> 1.obj是对象名,你属性这么多,不可能定义一堆String数组吧,还是封装成对象传递到后台。 2.index.index 第一个index就是你上面定义的varStatus,每次错的话varStatus这个隐式对象的值:index就表示当前循环对象的索引号。 OK,这样你在后台顶一个数组或者List,就可以完整接收你通过列表提交的数据了。
tony4geek 2014-07-30
  • 打赏
  • 举报
回复
你定义为数组接受数据。

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧