从Spring MVC / JSP / Controller中的ListBox中获取用户的选择

时间:2014-05-16 04:38:38

标签: java spring jsp spring-mvc

我正在构建我的第一个Spring MVC应用程序,而我正处于一个有点卡住的地方。我调用数据库来检索数字列表(区域),然后在列表框中填充它们。用户应选择其中一个选项,然后单击“提交”按钮。问题是我不知道如何在控制器端捕获它。起初我以为它会像获取参数一样简单,但我猜不是。我不想只为一个数字构建一个Java类/ Bean。这看起来有点愚蠢。所以,让我与你分享我的代码。

JSP:

<html>
<head>
    <title>Spring 3 MVC Series - Contact Manager</title>
</head>
<body>
<h2>Branches</h2>

<form:form method="get" action="branch.html">
    <table>

    <c:if test="${not empty lists}">
<select name="regions" size="4">
<c:forEach var="listVal" items="${lists}">

  <option>${listVal} </option>
</c:forEach>
</select>

</c:if>
</table>
</form:form>

 <form:form method="get" action="loadbranches.html">
  <c:if test="${not empty lists}"> 
 <select name="branches" size="4">
<c:forEach var="branchVal" items="${branches}">

  <option>${branchVal} </option>
</c:forEach>
</select>

</c:if>
    <tr>
        <td colspan="2">
            <input type="submit" value="submit choice" />
        </td>
    </tr>
</form:form>

</body>
</html>

控制器:

@Controller
@SessionAttributes
public class BranchController {

    @RequestMapping(value = "/loadbranches", method = RequestMethod.GET)
    public ModelAndView getBranches() 
    {

         //org.springframework.web.util.WebUtils.getParametersStartingWith(, prefix)
        DatabaseConnect dbCon = new DatabaseConnect();

         ArrayList<Object> branches = dbCon.loadData(USER SELECTED NUMBER I CANNOT FIGURE OUT);

         ModelAndView model = new ModelAndView("branch");

         model.addObject("branch", branches);


         return model;
    }

    @RequestMapping("/branch")
    public ModelAndView showRegions()
    {

          DatabaseConnect dbCon = new DatabaseConnect();

          ArrayList<Object> regionIDS = dbCon.loadData("regions");

          ModelAndView model = new ModelAndView("branch");
          model.addObject("lists", regionIDS);

          return model;

    }

}

正如您所看到的那样,应用程序还不是那么复杂。我正在使用数据库和另一个Java类,但它完美地工作。那么有没有办法从请求参数中的列表框中选择用户?理想情况下,我希望在用户点击提交时发生这种情况,这就是为什么除了数字列表(区域)的初始加载之外还有一个单独的表单标记,如果这有意义的话。我已经查看了涉及选择路径参数的不同示例,但是在用户点击提交按钮后,是否只有一种简单的方法可以从列表框中获取选择?我真的很感激这方面的帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

@RequestMapping(value = "/loadbranches", method = RequestMethod.GET)
public ModelAndView getBranches(@RequestParam(value="branches") String branches) 
    {

        ....
    }

如果用户可以选择多于1个brach(多选),则可以注入List:

@RequestMapping(value = "/loadbranches", method = RequestMethod.GET)
public ModelAndView getBranches(@RequestParam(value="branches") List<String> branches) 
        {

            ....
        }