Передача параметров из JSP в контроллер в Spring MVC - PullRequest
13 голосов
/ 08 апреля 2011

Я пробую пример проекта с использованием аннотированных контроллеров Spring MVC.Все примеры, которые я нашел в Интернете до настоящего времени, связывают JSP с конкретной моделью, и контроллер использует @ModelAttribute для извлечения объекта модели в методе обработчика.

Как перейти к передаче других параметров (не присутствующих в объекте модели) из JSP в контроллер?Я использую JavaScript, чтобы сделать это?Также кто-то может уточнить, для чего следует использовать объект HttpServletRequest.

Спасибо.

Ответы [ 2 ]

31 голосов
/ 11 апреля 2011

Просто удалите «путь» из тега ввода jsp и используйте HttpServletRequest для получения оставшихся данных.

Например, у меня есть боб, как

public class SomeData {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Тогда в jsp у меня будут дополнительные поля данных для отправки в обычном HTML-теге

<form:form method="post" action="somepage" commandName="somedata">
    <table>
    <tr>
        <td>name</td>
        <td><form:input path="name" /></td>
    </tr>
    <tr>
        <td>age</td>
        <!--Notice, this is normal html tag, will not be bound to an object -->
        <td><input name="age" type="text"/></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="send"/>
        </td>
    </tr>
</table>
</form:form>

Обратите внимание, у боба somedata есть поле имени, возраст которого не указан. Таким образом, поле возраста добавляется без «пути». Без атрибута path свойство объекта не будет связано с этим полем.

на контроллере мне нужно будет использовать запрос HttpServletRequest, как,

@RequestMapping("/somepage")
public String someAction(@ModelAttribute("somedata") SomeData data, Map<String, Object> map,
                                HttpServletRequest request) {

       System.out.println("Name=" + data.getName() + " age=" + request.getParameter("age"));

       /* do some process and send back the data */
        map.put("somedata", data);
        map.put("age", request.getParameter("age"));

        return "somepage";
   }

при доступе к данным в представлении,

<table>
    <tr>
        <td>name</td>
        <td>${somedata.name}</td>
    </tr>
    <tr>
        <td>age</td>
        <td>${age}</td>
    </tr>
 </table>

somedata - это bean-компонент, который предоставляет свойство name, а возраст явно задает атрибут контроллером.

1 голос
/ 14 мая 2013

Если кто-то не хочет создавать другой класс (бин), хотя он должен быть там, тогда кроме @ModelAttrbute можно также использовать @RequestParam.

public String someAction(@RequestParam("somedata") String data)
{
------
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...