Model view controller SpringMVC:传递控制器的最佳方式是什么;视图的操作名称?

Model view controller SpringMVC:传递控制器的最佳方式是什么;视图的操作名称?,model-view-controller,spring-mvc,Model View Controller,Spring Mvc,我希望视图知道调用了什么控制器和什么操作来生成它。事实上,我想在视图中这样做: <script> var controller = "${controllerName}"; var controllerAction = "${controllerAction}"; </script> 我的问题:自动将这些控制器和操作名称传递给视图的最佳方式是什么 我的控制器扩展了一个抽象的“BaseController”,所以我想将这些变量添加到ModelAttribu

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

<script>
    var controller = "${controllerName}";
    var controllerAction = "${controllerAction}";
</script>
我的问题:自动将这些控制器和操作名称传递给视图的最佳方式是什么

我的控制器扩展了一个抽象的“BaseController”,所以我想将这些变量添加到ModelAttribute中的最佳位置应该在那里。我更希望具体的控制器对要添加的变量不做任何事情。但是,父控制器如何知道子具体控制器的名称和操作的名称呢

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


你有更好的建议吗?

为什么你不能直接从你的url获取这些信息?通常,url映射到Spring中的控制器和操作。在javascript中,为什么不解析url以获取此信息?如果问题是操作因帖子、获取或标题信息的不同而不同,那么您可能可以将其作为参数附加到url中。

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

我找到了一个解决方案

使用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>
我找到了解决办法

使用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>

我将您的答案标记为解决方案,谢谢!事实上,在大多数情况下,解析url就可以做到这一点!我还发现了一种使用拦截器和Spring3.1自动传递这两个变量的方法(请参阅我下面的“解决方案”)。我将您的答案标记为解决方案,谢谢!事实上,在大多数情况下,解析url就可以做到这一点!我还发现了一种使用拦截器和Spring3.1自动传递这两个变量的方法(请参阅我的“下面的解决方案”)。谢谢分享。对于应用程序可能需要执行的任何日志记录,这可能也是一种很好的方法。我能想到这个的几种用途!如何将controllerName传递给另一个控制器?谢谢分享。对于应用程序可能需要执行的任何日志记录,这可能也是一种很好的方法。我能想到这个的几种用途!如何将controllerName传递给另一个控制器?
<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>
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());
    }
}