0

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

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

@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 类 [java.lang.String] 的无效属性“值”:bean 属性“值”不可读或具有无效的 getter 方法:getter 的返回类型是否与参数类型匹配二传手的

但是如果我将我的 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 时,我是一个新手,所以非常详细的回答将不胜感激。

4

1 回答 1

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 中找到一个获取值的方法,而这并不存在。

我只是使用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..
}
于 2013-01-15T21:03:39.317 回答