【问题标题】:Spring MVC: How to get view-name in JSP?Spring MVC:如何在 JSP 中获取视图名称?
【发布时间】:2011-08-30 10:21:35
【问题描述】:

是一种在 JSP 中访问视图名称的方法(profile 在下面的示例中)还是我需要将此名称添加到模型中?

@RequestMapping(value="/user/account", method=RequestMethod.GET)
    return "profile";
}

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

    我最近遇到了同样的问题。可能有解决此问题的官方方法,但我找不到。我的解决方案是创建一个拦截器来将视图名称放入模型中。

    我的拦截器很简单:

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    public class ViewNameInModelInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
    
            if (modelAndView != null) {
                modelAndView.addObject("springViewName", modelAndView.getViewName());
            }
            super.postHandle(request, response, handler, modelAndView);
        }
    
    }
    

    在 spring 配置中注册它也很简单(使用命名空间配置):

    <mvc:interceptors>
        <beans:bean class="ViewNameInModelInterceptor" />
    </mvc:interceptors>
    

    【讨论】:

      【解决方案2】:

      ${requestScope['javax.servlet.forward.servlet_path']}

      【讨论】:

      • 这应该被标记为答案!
      • 我得到 requestScope 为空,异常消息是“无法索引到空值”
      【解决方案3】:

      仅适用于将搜索 Thymeleaf 解决方案的人:

      ${#httpServletRequest.getServletPath()}
      

      【讨论】:

      • 与@Cyrils 答案相同:返回路径而不是返回的视图名称。
      【解决方案4】:

      您可以在jsp页面中获取视图名称,如下所示:

      ${pageContext.request.servletPath}
      

      【讨论】:

      • 它不起作用。它返回:/WEB-INF/pages/profile.jsp,但需要profile
      • 很抱歉,除了您在最初的消息中已经描述过之外,我不知道另一种方法。顺便说一句,当我确实需要视图名称时,我总是将视图名称放在模型中
      猜你喜欢
      • 2016-03-06
      • 2015-12-07
      • 2011-09-12
      • 1970-01-01
      • 2017-09-14
      • 2015-05-04
      • 1970-01-01
      • 2017-12-08
      • 2015-08-01
      相关资源
      最近更新 更多