Spring MVC下拉框抛出错误

时间:2013-01-15 20:53:56

标签: spring-mvc drop-down-menu jsp-tags

我按照question中的步骤操作,但我仍然遇到问题。

我的控制器如下所示......

@RequestMapping(value = "listBooks.htm")
public String goToNextPage(Model model, HttpServletRequest request){

    HashMap<String,Map<String,String>> hashMapOfData = new HashMap<String,Map<String,String>>();

    Map<String,String> m = new LinkedHashMap<String,String>();
    m.put("1", "foo");
    m.put("2", "bar");
    hashMapOfData.put("m", m);
    model.addAttribute("dropdownData", hashMapOfData);
.....
}

我的jsp文件......

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:select path="dropdownData"><br />
 <form:option label="Select..." value=""/>
 <form:options items="${dropdownData}" itemLabel="label" itemValue="value"/>
</form:select>

我收到了错误......

org.springframework.beans.NotReadablePropertyException:bean类的无效属性“value”[java.lang.String]:Bean属性“value”不可读或具有无效的getter方法:getter的返回类型是否匹配setter的参数类型

但如果我将我的jsp文件更改为...删除itemLabel="label" itemValue="value"

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:select path="dropdownData"><br />
 <form:option label="Select..." value=""/>
 <form:options items="${dropdownData}"/>
</form:select>

页面加载,但下拉框选择

  • 选择...
  • {1 = foo,2 = bar}

任何人都可以帮助我吗?对于Spring MVC,我是一个非常新手,所以非常感谢非常详细的回答。

1 个答案:

答案 0 :(得分:3)

错误描述了所有

org.springframework.beans.NotReadablePropertyException: Invalid property 'value' of bean class [java.lang.String]: Bean property 'value' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter

Spring试图在java.lang.String中找到一个值得到的getter,这个东西不存在。

我只使用List<LabelValueModel>(LabelValueModel是您自己制作的,具有标签和值的属性。

你最后的jsp会是这样的:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:select path="dropdownData"><br />
 <form:option label="Select..." value=""/>
 <form:options items="${dropdownData}" itemLabel="label" itemValue="value"/>
</form:select>

LabelValueModel只是一个简单的POJO,可以避免绑定到特定的技术:

public class LabelValueModel
{
  private String label;
  private String value;

  ..public getters..
  ..might consider private setters and only allowing setting through constructor..
}