Spring MVC:将控制器+动作名称传递给视图的最佳方法是什么?

时间:2012-02-08 00:53:55

标签: model-view-controller spring-mvc

我希望视图知道控制器和调用什么操作来生成它。事实上,我想在视图中做这样的事情:

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

,在后来的.js中,

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

...在这个.js中我希望能够访问这两个变量:

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

我的问题:将这些控制器和操作名称自动传递给视图的最佳方法是什么?

我的控制器扩展了一个抽象的“BaseController”,所以我想将这些变量添加到ModelAttribute的最佳位置就在那里。我会优先考虑具体的控制器与那些要添加的变量无关。但是,父控制器怎么知道子混凝土控制器的名称和动作的名称?

我可以在BaseController中检查StackTrace,但我真的不喜欢这个解决方案...

你有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

我找到了解决方案。

使用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());
    }
}

答案 1 :(得分:-1)

为什么您只能从网址获取此信息?通常,一个url映射到Spring中的控制器和动作。在javascript中为什么不解析网址来获取此信息?如果问题是操作因帖子,获取或标题信息而异,那么您可以将其作为参数附加到网址中。