2015-10-15 93 views
0

我有一个包含函数列表的jsp页面。在控制器中,我从数据库中获取这个列表并将它传递给jsp。如何在Spring MVC中将复选框值传递给控制器​​

@RequestMapping(value = "/functionlist", method = RequestMethod.GET) 
    public ModelAndView functionList(Model model) throws Exception { 
     ModelAndView mv = new ModelAndView("functionList"); 
     mv.addObject("functionList", getFunctionsFromDB()); 
     return mv; 
    } 

在我的jsp页面中创建表使用的功能

<table id="table"> 
    <thead> 
    <tr> 
     <th></th> 
     <th>Name</th> 
     <th>Action</th> 
    </tr> 
    </thead> 
    <tbody> 
    <c:choose> 
     <c:when test="${not empty functionList}"> 
      <c:forEach var="function" items="${functionList}"> 
       <tr> 
        <td><input name="id" value="${function.id}" hidden></td> 
        <td>${function.name}</td> 
        <td> 
         <input type="checkbox" id="${function.id}" value="${function.action}"></td> 
       </tr> 
      </c:forEach> 
     </c:when> 
    </c:choose> 
    </tbody> 
</table> 
<button type="submit" name="save">Save</button> 

我也给功能ID来复选框ID这个名单。

我的功能实体是以下

public class Function { 

    private Integer id; 
    private String name; 
    private Boolean action; 
... 
} 

我想按按钮保存并在控制器得到“/ functionlist /保存”复选框我值列表。

+0

这种情况在这里描述:https://stackoverflow.com/questions/2060839/spring-mvc-and-checkboxes –

回答

4

尝试添加form像这样JSP页面

<form:form id="yourForm" action="/functionlist/save" method="POST" modelAttribute="functionList"> 

     <c:forEach items="${functionList}" varStatus="status" var="function"> 

      <tr> 
       <td>${function.name}</td> 
       <td> 
        <form:checkbox path="functionList[${status.index}].action"/> 
       </td> 
      </tr> 
     </c:forEach> 

     <input type="submit" value="submit" /> 
    </form:form> 

和控制器,你应该有这样的

@RequestMapping(value = { "/functionlist/save" }, method = RequestMethod.POST) 
    public String savePerson(@ModelAttribute("functionList")List<Function> functionList) { 
     // process your list 
    } 
的方法

如果这不起作用,您可以尝试包裹您的列表。

public class FunctionListWrapper { 
    private List<Function> functionList; 

    public FunctionListWrapper() { 
     this.functionList = new ArrayList<Function>(); 
    } 

    public List<Function> getFunctionList() { 
     return functionList; 
    } 

    public void setFunctionList(List<Function> functionList) { 
     this.functionList = functionList; 
    } 

    public void add(Function function) { 
     this.functionList.add(function); 
    } 
} 

在控制器强似列表,通过包装

FunctionListWrapper functionListWrapper=new FunctionListWrapper(); 
     functionListWrapper.setFunctionList(userService.getFunctionList()); 
     mv.addObject("functionListWrapper", functionListWrapper); 

欲了解更多详情,请看一看这个问题:question 1question 2

1

首先,你需要name属性添加到您的复选框inputs.You可以 得到这些与同名控制器阵列,您的姓名attribute.eg-

@RequestMapping(value = "/functionlist", method = RequestMethod.GET) 
     public ModelAndView functionList(Model model,@RequestParam("checkboxname")String[] checkboxvalues) throws Exception { 
     ModelAndView mv = new ModelAndView("functionList"); 
     mv.addObject("functionList", getFunctionsFromDB()); 
     return mv; 
} 
0

几件事情。 首先你应该考虑一个表单对象,它是视图和控制器之间的交换实体。表单实体将类似于followng东西:

public class Form { 
private List<Function> functions; 
//getters & setters 
} 

其次,因为你正在使用Spring MVC的,你应该充分利用<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>库。因此,你的表格是:

<form:form commandName="form" action="/your/url"> 
<c:forEach items="${form.functions }" var="function" varStatus="status"> 
    <tr> 
     <td><form:hidden path="functions[${status.index }].id"></td> 
     <td>${function.name}</td> 
     <td> 
      <form:checkbox path="functions[${status.index }].action" id="${function.id}" value="${function.action}"/> 
     </td> 
    </tr> 
</c:forEach> 
</form:form> 

终于控制器会像

@RequestMapping(value="/your/url", method=RequestMethod.POST) 
public String postForm(@ModelAttribute("form") FormForm form) 
{ 
    //cool stuff here 
} 

请注意适当的HTTP方法是POST,没有得到。是的,我知道事情也与GET一起工作,这绝对是一个被弃用的策略。 另外,要弄清楚我是如何参考Form中的Function列表。当我必须显示数据时,我在foreach声明中使用了变量function,我在必须绑定Form对象以将数据传输到控制器时参考了列表。最后但并非最不重要的是,我没有尝试过这些代码。我只是为了给你提示如何正确使用它而写的。 最后一件事。由于您将表单传递给JSP,您不再需要使用您使用的属性填充模型。只需用数据填写表单,然后用它在视图中显示它们。就像这样${form.stuff.you.want}

相关问题