我按照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>
页面加载,但下拉框选择
任何人都可以帮助我吗?对于Spring MVC,我是一个非常新手,所以非常感谢非常详细的回答。
答案 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..
}