【问题标题】:Accessing Spring Controller Name from View从视图访问 Spring 控制器名称
【发布时间】:2012-08-10 04:20:07
【问题描述】:

使用 Spring,如何在视图中检索以下 Controller 属性?

  • 控制器名称
  • 控制器的@RequestMapping URI
  • 动作方法名称
  • Action 方法的 @RequestMapping URI

我尝试过的一种方法是创建 HandlerInterceptorAdapter 的子类并覆盖 postHandle。我将我的子类注册为给定路径列表的 mvc:interceptor - 这很笨重,但这是避免我的拦截器被 ResourceHandler 请求调用的唯一方法(我不想要)。在我的 postHandle 中,我可以轻松添加 2 个名称属性,但不能添加 URI...

  1. 从 HttpRequest 对象解析需要对所有 Controller RequestMappings 进行约束。 IE。我必须始终映射 /Controller/Action 或等效方案。相当有限。
  2. 创建 ApplicationContext 并使用 requestURI 进行查询过于冗长。

我正在考虑删除 HandlerInterceptorAdapter,而是为我的所有控制器定义一个 BaseController 来扩展。

在我这样做之前我想问一下,有没有更好的方法?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    您还没有说明为什么需要这样做(这有时有助于包括您的动机,因为其他人可以建议替代方法)。

    但我猜 Spring 3.1 的特性被松散地称为“端点文档”可能会满足您的要求......请参阅 Spring documentation 中的 RequestMappingHandlerMapping,它没有提供很多细节,所以这个示例项目是查看它的最佳位置:

    【讨论】:

    • 我需要某些属性在视图中可用(目前使用 JSP / JSTL),以便就“是否应该突出显示此导航栏元素?”之类的事情做出决策。和“面包屑视图应该包含什么?”。
    • 为什么不使用${pageContext.request.requestURI} 或其他请求对象属性之一?需要控制器名称似乎是多余的,您肯定可以只使用请求 URI 来实现它吗?
    • 如果不借助我的 JSP 中的一些相当复杂的 URI 解析逻辑,我看不到一种方法来确定要为面包屑视图呈现什么。以 /assets/getbyid/12345 与 /assets/listbydate/2012/08/15 为例,如果没有关于如何在我的视图层中解释 URL 的硬编码知识,我将如何将这两个 URL 转换为面包屑?在我看来,更好的方法是在请求范围级别提供知识,而不是在渲染时解析。
    • 标签库是一种方法 - 然后您将逻辑包含在 Java 代码(不是 JSP/JSTL)内的一个位置。也易于单元测试。您的示例没有提到这些 URI 的面包屑需要是什么,所以我只能猜测所需的逻辑是什么......一个包含“id”,另一个包含“list”???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多