Spring MVC Аннотированный контроллер - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть контроллер, который имеет несколько действий, которые запускаются при нажатии различных кнопок на странице.Я хотел бы иметь действие по умолчанию, но не уверен, как аннотировать метод.Вот пример:

@Controller
@RequestMapping("/view.jsp")
public class ExampleController {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView displayResults() {
        ModelAndView mav = new ModelAndView("view");
        mav.addObject("queryResults", methodToQueryDBForListing());
        return mav;
    }

    @RequestMapping(method = RequestMethod.POST, params="submit=Action 1")
    public ModelAndView action1(@RequestParam("selectedItemKey") String key) {
        ModelAndView mav = new ModelAndView("action1");
        //Business logic
        return mav;
    }

    @RequestMapping(method = RequestMethod.POST, params="submit=Action 2")
    public ModelAndView action2(@RequestParam("selectedItemKey") String key) {
        ModelAndView mav = new ModelAndView("action2");
        //Business logic
        return mav;
    }

    //A few more methods which basically do what action1 and action2 do
}

Как я могу аннотировать метод, который будет действовать на POST при любой нажатой кнопке подтверждения, когда клавиша не выбрана?

Я пробовал:

@RequestMethod(method = RequestMethod.POST, params="!selectedItemKey")
@RequestMethod(method = RequestMethod.POST)

Я бы действительно ненавидел это, если бы мне пришлось устанавливать required = false для каждого из методов, которые принимают RequestParams, а затем условно проверять, входит ли он или нет ... Есть ли способ аннотировать этоработать правильно?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Я бы сделал это переменной пути, а не параметром, и избавился бы от .jsp:

@RequestMapping("/view")
...

@RequestMapping("/action1")
@RequestMapping("/action2")
@RequestMapping("/{action}")

Это более "успокоительно".

1 голос
/ 12 апреля 2011

Правильная аннотация:

@RequestMapping(
  method = RequestMethod.POST, 
  params = { "!selectedItemKey", "submit" }
)     

Хотя странно, что этот метод не использовался до добавления второго параметра.

0 голосов
/ 12 апреля 2011

Я не очень знаком с аннотированным spring-mvc, но я помню, что при расширении MultiActionController вы можете указать точку входа по умолчанию, определив следующую конфигурацию пружины:

<bean name="myController"
class="foo.bar.MyController">
<property name="methodNameResolver">
    <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="defaultMethodName" value="init" />
    </bean>
</property>


package foo.bar

public class MyController extends MultiActionController {

    /**
     * Called when no parameter was passed.
     */
    public ModelAndView init(HttpServletRequest request,
            HttpServletResponse response) {
        return new ModelAndView("myDefaultView");
    }

    /**
     * action=method1
     */
    public void method1(HttpServletRequest request,
            HttpServletResponse response) {
        return new ModelAndView("method1"); 
    }

    /**
     * action=method2
     */
    public void method2(HttpServletRequest request,
            HttpServletResponse response) {
        return new ModelAndView("method2"); 
    }
}

Так что, возможно, в этом случае вы могли бы решить эту проблему, сконфигурировав свой контроллер через конфигурацию Spring вместо использования аннотаций.

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