【问题标题】:How to get a request object in Freemarker如何在 Freemarker 中获取请求对象
【发布时间】:2017-07-13 16:55:41
【问题描述】:

在 Velocity 模板引擎中,我可以只使用模型变量

$request

这是HttpServletRequest的一个实例。如何在 Freemarker 模板引擎中获取 http 请求对象?根据 freemarker 文档,

http://freemarker.org/docs/api/freemarker/ext/servlet/HttpRequestHashModel.html#getRequest--

有一个类 HttpRequestHashModel,它的方法返回一个 HttpServletRequest 的实例。

那么问题来了,如何在spring boot中访问这个对象呢?我发现了一些关于使用

${Request}

变量,但我得到一个错误,它返回一个空/缺失的对象。

【问题讨论】:

  • 如果您通过 FreemarkerServlet 使用 FreeMarker,则存在 Request 变量,而 Spring MVC 不这样做。否则 FreeMarker 本身不会定义这样的变量;在这种情况下,暴露这样的事情取决于 Spring MVC。与速度相同。您是否在 FreeMarker 中尝试过 ${request}(小写)?
  • request 变量不存在,但我检查了Request 变量并将其发送到我的模型。 freemarker 以某种方式检测到它,但我不知道如何与之交互以及它是什么类型的类。
  • 你想从请求中得到什么样的信息?也许还有其他方法。
  • @Jeroen 我想访问getPathInfo()HttpServletRequest 方法。
  • 我检查了org.springframework.web.servlet.view.freemarker.FreeMarkerView 的源代码,并且Request(还有SessionApplication)变量公开了“属性”(正如Servlet 规范所称的那样)对应的 servlet 范围。所以你不会有pathInfo 之类的。

标签: java spring spring-mvc spring-boot freemarker


【解决方案1】:

据我所知,Spring 不会将请求直接暴露给模板,但默认情况下它会暴露模型属性 springMacroRequestContext,其中包含有关请求的大量信息。

springMacroRequestContext 变量允许您获取有关请求的信息。

例如:

<html lang="${springMacroRequestContext.locale.language}" class="no-js">

${springMacroRequestContext.contextPath}

根据您获取路径的要求:

${springMacroRequestContext.requestUri} 

应该足够了。

请参阅 org.springframework.web.servlet.support.RequestContext 了解所有可用方法。

您可以通过在 application.properties 中设置以下属性来更改此属性的名称:

spring.freemarker.request-context-attribute=rc

这允许您缩短模板中的语法:

${rc.locale}

【讨论】:

  • 谢谢,我试试看。
  • 如果它解决了您的问题,请不要忘记将问题标记为已解决。
  • 很遗憾,我无法支持您的回答。我觉得它非常有价值,因为我在 spring 文档中没有找到关于这个对象的任何信息。他们应该在他们的文档中指出这个对象。
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 2019-08-24
  • 2013-03-18
  • 2015-05-18
  • 2020-06-12
  • 2017-07-05
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多