春天MVC 3中的"命令"modelName魔术值

Phi*_*ayo 5 java spring spring-mvc

如何删除"command"modelName参数的一些"神奇价值"印象来创建ModelAndView?

例:

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

一个希望是使用弹簧常数,如

new ModelAndView("page", DEFAULT_COMMAND_NAME, new MyObject());
Run Code Online (Sandbox Code Playgroud)

我发现"command"在spring-webmvc-3.0.5源jar的以下3个类中:

$ 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";
Run Code Online (Sandbox Code Playgroud)

问题是 :

  • 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>
Run Code Online (Sandbox Code Playgroud)

你必须写:

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

因为spring框架需要一个名为"command"的对象.用于绑定命令对象的缺省命令名:"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());
}
Run Code Online (Sandbox Code Playgroud)

但是在你的页面上

<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>
Run Code Online (Sandbox Code Playgroud)