当前位置: 代码迷 >> Java Web开发 >> 无法将checkbox的选中值传入action解决办法
  详细解决方案

无法将checkbox的选中值传入action解决办法

热度:151   发布时间:2016-04-16 21:36:37.0
无法将checkbox的选中值传入action
我在做一个权限管理功能,现在遇到的问题是无法将checkbox的选中值传入后台的action,我在浏览器跟踪了一下浏览器已经获得值了。前台checkbox代码如下:
 <c:forEach items="${privileges}" var="privilege" varStatus="statu">
    <input type="checkbox"  name="privileges.id"  value="${privilege.id.model},${privilege.id.privilegeValue}">
          ${privilege.name} <c:if test="${statu.count%4==0}"><br></c:if>
     </c:forEach>

formbean部分代码如下
private Integer groupid;
private String name;
private SystemPrivilegePK[] privileges;

public Integer getGroupid() {
return groupid;
}
public void setGroupid(Integer groupid) {
this.groupid = groupid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SystemPrivilegePK[] getPrivileges() {
return privileges;
}
public void setPrivileges(SystemPrivilegePK[] privileges) {
this.privileges = privileges;
}

JPA实体定义部分
private SystemPrivilegePK id;
/* 权限名称 */
private String name;

public SystemPrivilege(String model, String privilegeValue, String name) {
this.id = new SystemPrivilegePK(model, privilegeValue);
this.name = name;
}

public SystemPrivilege(SystemPrivilegePK id) {
this.id = id;
}

public SystemPrivilege(){}

@EmbeddedId
public SystemPrivilegePK getId() {
return id;
}
public void setId(SystemPrivilegePK id) {
this.id = id;
}
最后是action获取checkbox传入值的代码,调试后发现checkbox传入的是空值
for(SystemPrivilegePK id : formbean.getPrivileges()){
System.out.println("id"+id);
System.out.println(formbean.getPrivileges());
group.addPrivilege(new SystemPrivilege(id));
}
groupService.save(group);

下图是在火狐狸浏览器中表单提交后跟踪到的值

基本核心代码就是这样的,这个问题是第一次发帖提问了,如果哪位朋友帮忙解决了, 连第一个帖子的分数一起给那位朋友结了, 谢谢!
------解决思路----------------------
我是把选中的id保存成String 然后ajax传到后台的!
------解决思路----------------------
//批量删除(执行状态都是未执行状态时)
function deletes(){
var str="";
$("input[name='checkboxs']:checkbox").each(function() {
if ($(this).prop("checked")) {
str += $(this).val() + ","
}
})
if(str==""){
alert("至少选择一条策略!");
return;
}else{
str=str.substring(0,str.length-1);
}

var StrategyId=""; 
if(confirm('确认要删除吗!')){
$.ajax({
type:"post",
url:"modelaction!DeleteAll.action",
    data:"StrategyId="+str,
    success:function(data){
  if(data=="删除成功!"){
   alert(data);
   location.reload();
  }else{
   alert(data);
  }

    }
});
}else{
location.reload();
}
}
------解决思路----------------------
我不怀疑Struts能有这样的处理能力,但对于常用Spring MVC的开发者来说,楼主的代码明显存在问题:

1、
<input type="checkbox"  name="privileges.id"  value="${privilege.id.model},${privilege.id.privilegeValue}">
将带逗号复杂的值赋给SystemPrivilegePK类的id属性,要么id属性类型是String,要么得有个属性编辑器在背后协助转换工作。

2、
注意privileges.id,privileges属性本身是个数组对象,数组对象哪来的id属性?应该要根据索引位找到其中的实体对象才能绑定id属性吧,如privileges[0].id

------解决思路----------------------
你这种写法不行,还是建议前台用js组成json串传入后台吧。
  相关解决方案