简单的JSP-Spring 3下拉列表无效

时间:2013-04-21 17:44:47

标签: spring jsp spring-mvc

我知道这应该很容易但是在尝试了几件事之后我就陷入了困境。 我只是想在我的jsp中显示一个基本的下拉列表。 Spring版本是3所以我希望一切都能用于注释。

带有下拉列表的JSP表单:

<form:form method="post" commandName="countryForm">
                    <table>
                        <tr>
                            <td>Country :</td>
                            <td><form:select path="country">
                                    <form:option value="Select" label="Select" />
                                </form:select>
                            </td>

                        <tr>
                            <td colspan="3"><input type="submit" /></td>
                        </tr>
                    </table>
                </form:form>

CountryForm.java是一个普通对象,具有单个String属性“country”及其getter和setter。

处理GET请求的控制器如下:

@Controller
public class CountryFormController {

@RequestMapping(value = "MainView", method = RequestMethod.GET)
    public String showForm(Map model) {
        CountryForm cform = new CountryForm();
        model.put("countryForm", cform);
        return "MainView";
    }
}

但是,当我重定向到JSP“MainView”时,我得到了典型的错误:

org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'countryForm' available as request attribute
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:424)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

Spring TagLib中的select标记需要提供集合,映射或选项数组。我不确定你想要的是什么,所以我会做出一些假设。

您需要在控制器中包含对象的集合,地图或数组。理想情况下,您将拥有Country类并为一组国家/地区创建新实例。对于使用您的代码的示例,我刚刚创建了一个静态的国家/地区列表。将列表添加到模型中,然后修改select代码,将options设置为${countries}。假设countryStringCountryForm类型的字段,具有适当的get / set方法,则该国家/地区应在提交表单时数据绑定到字段。

<强>控制器

@Controller
public class CountryFormController {

@RequestMapping(value = "MainView", method = RequestMethod.GET)
    public String showForm(Map model) {

        List<CountryForm> cfs = new ArrayList<CountryForm>();
        cfs.add("United States");
        cfs.add("Canada");
        model.put("countries", cfs);
        model.put("countryForm", cform);
        return "MainView";
    }
}

<强> JSP

<form:select path="countryForm.country" options="${countries}"/>

答案 1 :(得分:0)

我在GitHub有示例代码,请试一试让我知道。查看landing.jspUserController

<form:select path="users[${status.index}].type" >
  <form:option value="NONE" label="--- Select ---"/>
  <form:options itemValue="name" itemLabel="description" />
</form:select>

HTH