2009-05-13 2 views
1

С Spring MVC легко выразить концепцию типа «Пользователь отправляет форму, если они используют POST или если они включают параметр isSubmit». Вы просто увеличили бы SimpleFormController и переопределили метод isFormSubmission.Spring MVC isFormSubmission() эквивалент для аннотаций?

Однако Spring MVC теперь использует эти аккуратные аннотации, такие как @RequestMapping для обработки запросов. @RequestMapping имеет явный фильтр для того, кто-то использовал GET или POST, но я не вижу никакой неотъемлемой поддержки всей полезной логики SimpleFormController. Является ли он доступным для меня с аннотациями?

ответ

1

Итак, после небольшого расследования, на самом деле существует несколько способов справиться с этой ситуацией.

Первый способ - использовать SimpleFormController с аннотацией @RequestMapping на уровне класса. Менее известным, но довольно классным свойством @RequestMapping является то, что он отлично знает, как справляться с классами, реализующими интерфейс Spring Controller. Единственным недостатком здесь является то, что я все еще использую старые интерфейсы и классы MVC, и они будут устаревать в Spring 3.0.

Второй путь был указан kgiannakakis выше. Просто создайте метод @RequestMapping для всех способов, с помощью которых можно отправить submit, и попросите их просто вызвать один метод отправки, либо в стиле цепочки конструктора, либо с помощью частного метода. Простой и понятный. Спасибо, кганнакакис!

0

Копирование here:

Path mappings can be narrowed through parameter conditions: a sequence of 
"myParam=myValue" style expressions, with a request only mapped if each such 
parameter is found to have the given value. "myParam" style expressions are 
also supported, with such parameters having to be present in the request 
(allowed to have any value). Finally, "!myParam" style expressions indicate 
that the specified parameter is not supposed to be present in the request. 

Вы можете использовать только параметры RequestMapping для определения требуемой функциональности. Контроллер аннотаций не использует какой-либо интерфейс для работы.

+0

Но это работает только для дальнейшего сужения запроса. Я не могу сказать: «Это сообщение ИЛИ у него есть этот параметр». Я могу только сказать: «Это сообщение, и у него есть этот параметр». –

+3

У вас может быть два разных метода, вызывающих частный метод submitForm. Первый будет использовать RequestMapping для обработки POST-кода, другой - GET и параметр. – kgiannakakis

+0

+1 для этого. Метод could обработчика представления формы вызывается множеством методов аннотированных обработчиков, каждый из которых улавливает множество способов выражения отправки формы (например, тот, который ловит POST, другой, который ловит один с параметром). Это некрасиво, но тогда то, что вы пытаетесь сделать, очень своеобразно и не очень хорошая идея. – skaffman

0

Вот один пример использования отображений Path:

@RequestMapping(params = "formAction=APPROVE", method = RequestMethod.POST) 
    public String myMethod().... 

Этот метод будет вызываться только тогда для ДОЛЖНОСТИ, где есть поле с именем «formAction» со значением «УТВЕРЖДАЮ».

0

Другие ответы на перечисленные работы отлично подходят для метода, аннотированного с помощью @RequestMapping.

Однако, если вы хотите, чтобы достичь того же на метод с аннотацией @InitBinder, вы можете просто сделать это:

@InitBinder 
public void initBinder(HttpServletRequest request) { 
    if ("POST".equals(request.getMethod()){ 
     //Do something 
    } 
} 
Смежные вопросы