1

我是 spring 新手,在 spring3.0 中创建一个应用程序我正在使用注释 spring。

我想从我的控制器方法返回列表到jsp。该列表将显示在选择框中。以下是控制器和jsp部分的代码。请帮助我理解这一点。

public String showUserForm(ModelMap model)  
{       
  User user = new User();
  model.addAttribute(user);
  List<String> lookingfor=service.getOptions();
  //want to send this "lookingfor" to the jsp       
  return "welcome";     
}

和 JSP

<td>    
  <form:select path="lookingfor">
  <form:option value="0" label="Select" /> 
  <form:options items="${lookingfor}" itemValue="lookingfor" itemLabel="lookingfor" />                 </form:select>           
</td>

在模型中添加用户时,它工作正常,但是当我添加查找属性时。 model.addAttribute("寻找", 寻找);

它给出以下错误。

严重:servlet jsp 的 Servlet.service() 抛出异常 org.springframework.beans.NotReadablePropertyException:bean 类 [java.lang.String] 的无效属性“查找 gfor”:bean 属性“查找”不可读或无效getter 方法:getter 的返回类型是否与 setter 的参数类型匹配?

4

4 回答 4

2

您必须将 lookingFor 列表作为属性添加到 ModelMap 对象中:

model.addAttribute("lookingfor", lookingfor);

还要验证属性“itemValue”和“itemLabel”的用法,因为 itemValue 和 itemLabel 都引用了lookingFor 列表项的属性。您在两者上使用相同的值,这是错误的。

于 2012-04-04T17:03:39.233 回答
1

你也可以返回 ModelAndView

例如

public ModelAndView showUserForm()  
{  
  mv= new ModelAndView("welcome");     
  User user = new User();
  mv.getModel.put("user",user);
  List<String> lookingfor=service.getOptions();
  //want to send this "lookingfor" to the jsp 
  mv.getModel().put("lookingfor",lookingfor);      
  return mv;     
}

编辑:作为对下面评论的回应,请查看 itemValue 这应该是您正在寻找的对象的属性之一,请参阅此国家/地区列表示例

 <form:options items="${countryList}" itemValue="code" itemLabel="name"/>

其中 list 是国家对象的列表,代码和名称是国家对象的属性

编辑2

所以就在jsp中做

<c:forEach var="item" items="${lookingfor}">
 <form:option value="${item}"/>
</c:forEach>
于 2012-04-04T17:07:38.880 回答
0

你也可以这样使用

@RequestMapping("get_vendor_tests.htm")
    public ModelAndView getVendorTests(@RequestParam int vendorId,Map<String, Object> map){
        try {
            map.put("vendor", vendorService.getVendor(vendorId));
            return new ModelAndView("vendor_tests","message",map);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            logger.error("In vendor tests for vendor Id:"+vendorId+"",e);
            return new ModelAndView("error","message", e);
        }

    }
于 2012-04-04T17:10:08.200 回答
0

使用模型传回列表

public String showUserForm(ModelMap model)  {       
  User user = new User();       
  model.addAttribute(user);
  //want to send this "lookingfor" to the jsp           
  List<String> lookingfor=service.getOptions();
  model.addAttribute("lookingFor", lookingFor);                 
  return "welcome";     
}

在您的 jsp 中显示如下选项:

  <form:select path="lookingFor">
      <form:option value="-" label="--Please Select"/>
      <form:options items="${lookingFor"}"/>
  </form:select>
于 2012-04-04T17:11:51.617 回答