JSP / page中的Spring MVC Controller类名

时间:2014-01-22 08:14:53

标签: java spring jsp spring-mvc servlets

我有一个问题,我需要尽快修复一个问题......在解决这个问题时,我已经解决了一些问题。

请参阅,我需要从JSP页面显示当前服务的Spring Controller。该名称不必在JSP本身中进行解析,我实际上正在使用另一个类(一种标记库)在任何页面的底部显示此信息。

有没有办法从外部类中获取控制器名称? (当我在外面说,我的意思是来自另一个类而不是控制器本身。) 也许是从某种程度上的要求? (或者一些Spring Security请求属性?)。 也许是一个拦截器?

我想避免从控制器扩展一个类来解决这个问题。

任何建议都是适当的!

3 个答案:

答案 0 :(得分:4)

您可以实施HandlerInterceptor * 它有一个方法postHandle,它有两个你需要的参数:

  • Object handler - 可以强制转换为HandlerMethod,包含有关处理请求的Controller方法的信息
  • ModelAndView - 您需要添加有关处理方法
  • 的新信息

完成方法签名org.springframework.web.servlet.HandlerInterceptor#postHandle

void postHandle(HttpServletRequest request,
                HttpServletResponse response,
                Object handler,
                ModelAndView modelAndView)
      throws Exception;

*不是直接实现HandlerInterceptor,而是可以扩展HandlerInterceptorAdapter - 这是一个方便的抽象类,它实现了HandlerInterceptor所有带空体的方法,因此只需要覆盖所需的方法。

*不要混淆,有两个HandlerInterceptor类,一个用于Servlet,一个用于Portlets(org.springframework.web.portlet.HandlerInterceptor)。使用HandlerInterceptor for Servlets oorg.springframework.web.servlet.HandlerInterceptor

答案 1 :(得分:1)

正常的java方式,来自控制器本身的mwith可能赢了;因为spring创建了原始类的代理:

String className = this.getClass().getSimpleName();

我认为您需要实施request mapping handler

答案 2 :(得分:0)

你可以创建一个after advise拦截器,它将在你的控制器被调用后被调用。在这个拦截器中,您可以获得应用此建议的pointCut方法。完成后,您可以将其添加为ModelAndView映射中的属性。