0

我知道这应该很容易,但是在尝试了几件事后我被卡住了。我只是想在我的 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 是一个普通对象,具有单个字符串属性“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)

我究竟做错了什么?

4

2 回答 2

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>

高温高压

于 2013-04-22T01:20:55.017 回答
0

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

您需要在控制器中包含对象的集合、映射或数组。理想情况下,您将拥有一个Country类并为一组国家/地区创建新实例。对于使用您的代码的示例,我刚刚创建了一个国家的静态列表。将列表添加到您的模型中,然后修改select标签,options${countries}. 假设country是一个类型为StringonCountryForm且具有适当的 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}"/>
于 2013-04-21T18:04:46.813 回答