2011-07-22 59 views
4

如何去掉一些「魔術值」印象"command" modelName參數來創建一個ModelAndView?「命令」modelName魔術值在春天MVC 3

實施例:

@RequestMapping(value = "/page", method = GET) 
public ModelAndView render() { 
    return new ModelAndView("page", "command", new MyObject()); 
} 

一個希望是用一個彈簧常數如

new ModelAndView("page", DEFAULT_COMMAND_NAME, new MyObject()); 

我在彈簧webmvc-3.0.5源罐的3以下類發現"command"

$ ack-grep 'public.*"command"' 
org/springframework/web/servlet/mvc/BaseCommandController.java 
140: public static final String DEFAULT_COMMAND_NAME = "command"; 

org/springframework/web/servlet/mvc/multiaction/MultiActionController.java 
137: public static final String DEFAULT_COMMAND_NAME = "command"; 

org/springframework/web/servlet/tags/form/FormTag.java 
56: public static final String DEFAULT_COMMAND_NAME = "command"; 

的問題是:

  • BaseCommandController已被棄用
  • 我們不使用MultiActionControllerFormTag

回答

10

當您使用你的JSP標籤春<form:form>

<form:form method="POST" action="../App/addCar"> 
<table> 
<tr> 
    <td><form:label path="brand">Name</form:label></td> 
    <td><form:input path="brand" /></td>   
</tr> 
<tr> 
    <td><form:label path="year">Age</form:label></td> 
    <td><form:input path="year" /></td> 
</tr>  
<tr> 
    <td colspan="2"> 
     <input type="submit" value="Submit" />    
    </td> 
</tr> 
</table> 
</form:form> 

你必須寫:

@RequestMapping(value = "/car", method = RequestMethod.GET) 
public ModelAndView car() { 
return new ModelAndView("car", "command", new Car()); 
} 

因爲Spring框架預計將對象與名稱 「命令」。 用於綁定命令對象的默認命令名稱:「command」。 將此實例化命令類綁定到請求時使用的名稱。

http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/web/servlet/mvc/BaseCommandController.html

但是,當您使用HTML表單<form>你可以寫:

@RequestMapping(value = "/car", method = RequestMethod.GET) 
public ModelAndView car() { 
return new ModelAndView("car", "YOUR_MODEL_NAME", new Car()); 
} 

但是你的頁面上

<form method="POST" action="../App/addCar"> 
<table> 
<tr> 
    <td><form:label path="YOUR_MODEL_NAME.brand">Name</form:label></td> 
    <td><form:input path="YOUR_MODEL_NAME.brand" /></td>   
</tr> 
<tr> 
    <td><form:label path="YOUR_MODEL_NAME.year">Age</form:label></td> 
    <td><form:input path="YOUR_MODEL_NAME.year" /></td> 
</tr>  
<tr> 
    <td colspan="2"> 
     <input type="submit" value="Submit" />    
    </td> 
</tr> 
</table> 
</form> 
0

我不會使用默認的名稱。如果對象是User,則稱它爲user,如果它是Item,則將其稱爲item。如果您需要默認值(例如 - 對於通用框架),請定義您自己的常量。