【问题标题】:Sending <option> value from JSP form to Controller Spring MVC将 <option> 值从 JSP 表单发送到 Controller Spring MVC
【发布时间】:2016-10-26 19:19:09
【问题描述】:

这是我在 JSP 文件中的表单:

    <p class="lead">Check out the books in my store...</p>

    <form:form action="${pageContext.request.contextPath}/bookListByCategory"> 
    <select path="category">
        <option value="Programming">Programming</option>
        <option value="Fiction">Fiction</option>
        <option value="Biography">Biography</option>
        <option value="Travel">Travel</option>
    </select>
    <input type="submit" name="submit" value="submit" />
    </form:form>

表单发送到方法:

@RequestMapping(value = "/bookListByCategory/{category}")
public String getBooksByCategory(@PathVariable String category, Model model) {
    List<Book> bookListByCategory = bookService.getBookListByCategory(category);
    model.addAttribute("books", bookListByCategory);
    model.addAttribute("category", category);
    return "bookList";
}

由于某种原因它不起作用,我可以在浏览器中看到以下内容:

当我点击“提交”时,它会显示 404:

我可以看到所选选项的值没有发送到控制器,这是处理请求所必需的。有什么想法吗?

【问题讨论】:

  • 你的应用的上下文路径是什么?
  • 尝试为&lt;select&gt; 命名,就像&lt;select path="category" name="category"&gt; 一样
  • 感谢拉希鲁阿山!我忘了在选择标签中包含name="category"。这里不需要 path="category",因为它不是 form:select,现在它可以正常工作了。

标签: spring jsp spring-mvc


【解决方案1】:

现在的工作形式:

<form action="${pageContext.request.contextPath}/bookListByCategory"> 
    <select name="category" onchange="this.form.submit();">
        <option value="all">-- category --</option>
        <option value="Programming">Programming</option>
        <option value="Fiction">Fiction</option>
        <option value="Biography">Biography</option>
        <option value="Travel">Travel</option>
    </select>
</form>

还有控制器中的两个方法:

@RequestMapping(value = "/bookListByCategory/{category}")
public String getBooksByCategory(@PathVariable String category, Model model) {
    List<Book> bookListByCategory = bookService.getBookListByCategory(category);
    model.addAttribute("books", bookListByCategory);
    model.addAttribute("category", category);
    return "bookList";
}

@RequestMapping(value = "/bookListByCategory")
public String getBooksByCategoryForm(@ModelAttribute("category") String category, 
        Model model) {
    if (category.equalsIgnoreCase("all")) {
        return "redirect:/bookList/";
    } else {
        return "redirect:/bookListByCategory/" + category;          
    }
}

一切正常并产生所需的输出。

【讨论】:

    【解决方案2】:

    我将给出一个关于如何将选项发送到 mvc 控制器的简化示例。

    所以在 jsp 中说你有这个 -

    请注意,我在这里使用了&lt;form:select/&gt;,而不仅仅是select

    <form:form action="bookListByCategory" method="get">
      <form:select path="category">
        <form:option value="NONE"> --SELECT--</form:option>
        <form:options items="${listOfCategories}"></form:options>
      </form:select>
      ...
    </form:form>
    

    现在在控制器中使用RequestParam

    @RequestMapping(value = "/bookListByCategory", method = RequestMethod.GET)
    public String getBooksByCategory(@RequestParam String category, Model model)
        throws Exception {
    
           //rest of code ....
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      相关资源
      最近更新 更多