BindingResult和bean名称'command'都没有普通的目标对象。春天例外

时间:2014-01-29 10:17:50

标签: spring jsp spring-mvc

我开始学习spring MVC3,我想在这里显示一个简单的“搜索表单”我的jsp文件

<form:form method="post" action="addGeo.html" >
    <table>
        <tr>
            <td>        
                <input type="submit" value="<spring:message code="label.addzone"/>"/>
            </td>
        </tr>
    </table>    
</form:form>

<form:form method="post" action="maingeo.html" >
    <table>
        <tr>
            <td>
                <form:label path="codeZone"><spring:message code="label.area"/></form:label>
            </td>
            <td>    
                <form:input path="codeZone" />
            </td>        
            <td>
                <form:label path="type"><spring:message code="label.type"/></form:label>
            </td>  
            <td>
                <form:input path="type" />
            </td>        
            <td>
                <form:label path="codePostal"><spring:message code="label.departement"/></form:label>
            </td>
            <td>
                <form:input path="codePostal" />
            </td>
            <td>        
                <input  type="submit" value="<spring:message code="label.searchArea"/>"/>
            </td>
        </tr>
    </table> 
</form:form>

在这里我的控制器:

@Controller
public class RefGeoController {

@Autowired  
private RefGeoService refgeoService;        

    @RequestMapping("/maingeo")
    public String goSearchArea() {
        return "maingeo";
    } 
}

当我转到这个url页面时,我遇到了这个异常:java.lang.IllegalStateException:BindingResult和bean名称'command'的普通目标对象都不可用作请求属性。我想我忘记了我的形式或者可能在我的控制器中,但我不知道在哪里。此外,当我不想将特定模型发送到我的jsp视图时,我应该在我的方法参数上放什么?

1 个答案:

答案 0 :(得分:1)

您需要编写一个包含表单字段的类 - 这种类称为Command-Object / Class。

然后在您负责提供表单页面的Controller方法中,您需要创建此Command-Object的实例,将其放入Model中,然后让视图呈现它。模型中用于Command-Object的名称必须与<form:form command="myCommand">标记的“command”属性名称匹配。如果您没有此属性,则默认名称为command

@Controller public class RefGeoController {

   @Autowired private RefGeoService refgeoService;        

   @RequestMapping("/maingeo")
   public ModelAndView goSearchArea() {
      return new ModelAndView("maingeo", "searchCommand", new SearchCommand());
   }

   //only to prevent your next question: How to recive the committed form
   @RequestMapping("/maingeo.html", method = RequestMethod.POST)
   public ModelAndView handleSearch(SearchCommand searchCommand) {
      ... implement the search stuff
   } 
}


<form:form method="post" action="maingeo.html" command="searchCommand">