前言:有时候会table from tr的需求,即每行为一个表单。但在html格式上,这是不被允许的,详见http://blog.sina.com.cn/s/blog_6903bf1d0100k6zv.html。为此,我们需要转换一下思路,才能达到我们的要求。
思路:先做单个处理,批量处理=checkbox + ajax提交单个事项的数据+单个处理。
方法:form表单每行数据name属性唯一化,ajax提交+单个处理。
当我们在办理事项时,当点击办理按钮会出现一个form表单,填写相关信息,提交后台,后台代码处理信息,信息办理完成。 这是整个流程。
有时会有批量处理的情况,即一次性处理多项事项。按理推应是同一页面多个表单,至于多表单提交的问题暂且不提。 我们来看一下批量处理怎么用一个表单来处理。
页面:
<a id="plbl" class="button" title="批量办理" ref="bl"><span>办理</span></a>
<from id="form">
<table>
<#list data as jj>
<!--每一行为一个基础事项-->
<tr>
<!-- 勾选框-->
<td><input type="checkbox" name="checkedTask" value="${(jj.id)!}" checked="checked"></td>
<td>${(jj.bt)!}</td>
<td><input type="text" name="yj_${jj.id}" ></td>
<td><input type="text" name="nextPerson_${jj.id}"></td>
</tr>
</#list>
</table>
</form>
js(此处用到了js的遍历$.each()):
$("#plbl").click(function(){
$("input[name='checkedTask']:checked").each(function(index){
var id = $(this).val();
var yj = $("input[name='yj_"+id+"']").val();
var nextPerson = $("input[name='nextPerson_"+id+"']").val();
if(closeProc=="0" && nextPerson==""){
alert("下一节点人不能为空!");
return;
}
var params = {
taskId:id,
yj:yj,
nextPerson:nextPerson
};
$.ajax({
type:"POST",
url:"activiti/saveTaskVars",
data:params,
contentType:"application/x-www-form-urlencoded",
dataType: "json",
success: function(data){
taskDetailDialogAjaxDone(data);
},
error: function(data){
alert("错误");
}
});
});
});
其中contentType:"application/x-www-form-urlencoded" 必须加上。详情请参考:http://blog.youkuaiyun.com/eyebrother/article/details/36007145
@RequestMapping("saveTaskVars")
@ResponseBody
public Map<String, Object> saveTaskVars(@RequestParam(name = "taskId", required = false) String taskId,
HttpServletRequest request, HttpSession session) {
Map<String, Object> variables = getParamsMap(request);
session.setAttribute(ProcInfoType.BASEFORMVARS.toString(), variables);
Account account = (Account) session.getAttribute(Constants.ACCOUNT);
if(variables.get("reProcdefId").equals("653")) {//欠税公告处理
String procInstId = (String) variables.get("procInstId");
String ggbj = (String) variables.get("ggbj");
String auditOpinion = (String) variables.get("auditOpinion");
Map<String, String> params = new HashMap<>();
params.put("procInstId", procInstId);
params.put("ggbj", ggbj);
taxInfoService.updateByProcInstId(params);//更新公告意见
}
// 如果下一个节点不需要配置人,跳过受理人指定
try {
Map<String, Object> vars = new HashMap<String, Object>();
vars.putAll(variables); // 防止在getNextTaskDef方法里篡改session里的变量variables
TaskDefinition td = getNextTaskDef(taskId, vars);
if (td == null || // 流程结束或下一节点是子流程
(td.getAssigneeExpression() != null
&& StringUtils.isNotBlank(td.getAssigneeExpression().getExpressionText()))
|| "1".equals(variables.get("SkipPageToSetReceiver"))) {
return DwzResponse.getInstance().putData("taskId", taskId).putData("tailPath", "complete")
.closeCurrent().responseMap();
}
} catch (Exception e) {
e.printStackTrace();
}
return DwzResponse.getInstance().putData("tailPath", "ruTask").putData("taskId", taskId).closeCurrent()
.responseMap();
}