Spring MVC: Каков наилучший способ передачи контроллера и имени действия представлению? - PullRequest
0 голосов
/ 08 февраля 2012

Я хочу, чтобы представление знало, какой контроллер и какое действие было вызвано для его генерации. На самом деле, я хочу сделать что-то вроде этого в представлении:

<script>
    var controller = "${controllerName}";
    var controllerAction = "${controllerAction}";
</script>

и, позже, .js,

<script src="/public/script.js"></script>

... в этом .js я хочу иметь доступ к обеим переменным:

if(controller == "UserController" && controllerAction == "Edit")
{
    // ...
}
else
{
    // ...
}

Мой вопрос: как лучше всего автоматически передать эти имена контроллеров и действий в представление?

Мои контроллеры расширяют абстрактный "BaseController", поэтому я думаю, что лучшее место для добавления этих переменных в ModelAttribute было бы там. Я бы предпочел, чтобы конкретные контроллеры ничего не делали для добавления этих переменных. Но как родительский контроллер мог узнать имя дочернего конкретного контроллера и имя действия?

Я мог бы проверить StackTrace в BaseController, но мне не очень нравится это решение ...

У вас есть лучшее решение, чтобы предложить?

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

Я нашел решение.

Используя Spring 3.1, я использую эти bean-компоненты:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="interceptors">
        <bean id="baseInterceptor" class="xxx.xxx.xxx.BaseInterceptor" />
    </property>
</bean>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

А в методе BaseInterceptor postHandle () обработчик объектов становится HandlerMethod экземпляр, который содержит всю необходимую мне информацию!Затем мне просто нужно добавить эту информацию в объект ModelAndView.

public class BaseInterceptor extends HandlerInterceptorAdapter
{
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception 
    {
        HandlerMethod handlerMethod = (HandlerMethod)handler;

        modelAndView.addObject("controllerName", handlerMethod.getBean().getClass().getName());
        modelAndView.addObject("controllerAction", handlerMethod.getMethod().getName());
    }
}
0 голосов
/ 08 февраля 2012

Почему вы не можете просто получить эту информацию из своего URL?обычно URL отображается на контроллер и действие в Spring.В javascript почему бы просто не проанализировать URL, чтобы получить эту информацию?Если проблема в том, что действие отличается в зависимости от сообщения, получения или информации заголовка, вы, вероятно, можете добавить это в URL в качестве параметра.

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