【问题标题】:Spring MVC Drop down box throws errorSpring MVC 下拉框抛出错误
【发布时间】:2013-01-15 20:53:56
【问题描述】:

我按照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 类 [java.lang.String] 的无效属性“值”:bean 属性“值”不可读或具有无效的 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 时,我是一个新手,所以非常详细的回答将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    错误说明了一切

    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&lt;LabelValueModel&gt;(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..
    }
    

    【讨论】:

    • 感谢您的回复。你能谈谈我将如何制作一个 LabelValueModel 更多一点吗?
    • 呃,我还是很困惑。我创建了 LabelValueModel 类。 List 在我的控制器中会去哪里?
    • 作为双 Map 的替代品,在后端解析那个 jsp 标签,form:options 标签的 items 属性在 Map 上调用 keySet(),它返回一个迭代java.lang.String。然后将这个对象传递给 itemLabel 和 itemValue 属性,该属性在 java.lang.String 中查找具有 getLabel 和 getValue 值的 getter,因为 itemLabel 是标签和 itemValue 值。如果你传入一个 POJO 列表,getter 就会在那里,字符串也会显示出来。
    • HashMap> hashMapOfData = new HashMap>(); ??抱歉,如果有人可以简单地编辑我的控制器并进行细微的更改,将不胜感激。
    • 不,只是 List 没有理由为此有一个地图,事实上,它只是让事情变得更复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2020-10-31
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多