我知道这应该很容易但是在尝试了几件事之后我就陷入了困境。 我只是想在我的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)
我做错了什么?
答案 0 :(得分:0)
Spring TagLib中的select
标记需要提供集合,映射或选项数组。我不确定你想要的是什么,所以我会做出一些假设。
您需要在控制器中包含对象的集合,地图或数组。理想情况下,您将拥有Country
类并为一组国家/地区创建新实例。对于使用您的代码的示例,我刚刚创建了一个静态的国家/地区列表。将列表添加到模型中,然后修改select
代码,将options
设置为${countries}
。假设country
是String
上CountryForm
类型的字段,具有适当的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.jsp和UserController
<form:select path="users[${status.index}].type" >
<form:option value="NONE" label="--- Select ---"/>
<form:options itemValue="name" itemLabel="description" />
</form:select>
HTH