Spring MVC如何将<select>值作为表单/模型值返回?</select>

时间:2015-03-18 10:05:20

标签: java jsp spring-mvc

我可能会以错误的方式解决这个问题,但我正在编写一个应用程序,该应用程序以简单页面开头,下拉选择然后根据选择进行。当我使用spring MVC时,我认为最简单的解决方案是将select值设置为对象本身,但它似乎返回Null。

所以初始主页控制器是

@Controller
@RequestMapping("/")
public class HomeController  extends JFrame { 

@Autowired
private FruitDAO fruitDAO;

 @RequestMapping(method = RequestMethod.GET)
 public String HomePage(Model model) {

        List<Fruit> fruit = fruitDAO.ListAll();
        model.addAttribute("fruits", fruits);

        return "Home";
    }

打开页面Home.jsp

&#13;
&#13;
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
    <body>
    <form method="POST" commandName="fruitForm" > 
    <h2>Choose a fruit</h2>

    <select id="fruits" name=Fruits >
    <c:forEach var="fruit" items="${fruits}" >
       <option value="${fruit}" >${fruit[1]} (ID: ${fruit[0]})</option>
    </c:forEach>
    </select>

    <input type="submit" id="submit" value="View" />

    </form>
    </body>
    </html>
&#13;
&#13;
&#13;

我当时只是希望将帖子返回到同一个控制器(稍后重定向)。

@RequestMapping(method = RequestMethod.POST)
 public String processFruitSelection(@ModelAttribute("fruitForm") Fruit fruit) {
        // for testing purpose:
        System.out.println("Fruit: " + fruit.getName());

        //curretly a dummy hello world page
        return "TestPage";
 }

Fruit显然是一个虚拟实体,但实际上该模型有4个基本属性(3个字符串和1个日期)。目前它返回null。我猜测返回的表单对象实际上并不是所选的值。

如果有人能告诉我是否有办法让所选择的值返回表格值,或者我采取了完全错误的方法,我将不胜感激!?

感谢。

2 个答案:

答案 0 :(得分:1)

你应该在jsp中使用spring form标签而不是简单的form标签。 也使用<form:input>和春天提供的所有内容。

<form:form modelAttribute="fruits" method="POST">

答案 1 :(得分:1)

现有代码中存在一些错误:
1.在主页控制器中,您要添加水果而不是水果(列表名称)
2.在Home.jsp中,在选项中,fruit是可变的,而不是数组

解决方案是您必须使用form:formform:selectform:option,如下所示:
此处meeting是您的模型属性,meetings是您的列表

<form:form action="controllerName" method="POST" modelAttribute="meeting">
   <form:select path="country">
     <form:option value="NONE" label="Select" />
     <form:options items="${meetings}" />
   </form:select>
</form:form>