«команда» modelName магическое значение весной MVC 3 - PullRequest
5 голосов
/ 22 июля 2011

Как удалить часть «магического значения» показания параметра "command" modelName для создания ModelAndView?

Пример:

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

Одна надежда заключалась в использовании пружинной константынапример,

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

Я нашел "command" в 3 следующих классах jar-источников источника spring-webmvc-3.0.5:

$ 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 устарела
  • Мы не используем MultiActionController и FormTag

Ответы [ 2 ]

10 голосов
/ 16 августа 2013

Когда вы используете тег jsp spring <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 ожидает объект с именем «команда».Имя команды по умолчанию, используемое для привязки объектов команды: «команда».Это имя используется для привязки экземпляра класса команды к запросу.

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 голосов
/ 22 июля 2011

Я бы не использовал имя по умолчанию. Если объект является User, назовите его user, если это Item, назовите его item. Если вам нужно значение по умолчанию (например, для универсального фреймворка), определите свою собственную константу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...