当前位置: 首页 > 知识库问答 >
问题:

在Thymeleaf方言处理器中访问HttpServletRequest和HttpServletResponse

公羊涛
2023-03-14

我试图创建一个Thymeleaf方言处理器,它执行ServletDispatcher.Include。我已经扩展了AbstractElementTagProcessor并重写了doProcess方法。相关的代码片段是:

@Override
protected void doProcess(final ITemplateContext context, final IProcessableElementTag tag, final IElementTagStructureHandler structureHandler) {
    ServletContext servletContext = null; // TODO: get servlet context
    HttpServletRequest request = null; // TODO: get request
    HttpServletResponse response = null; // TODO: get response

    // Retrieve dispatcher to component JSP view
    RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/something");

    // Create wrapper (acts as response, but stores output in a CharArrayWriter)
    CharResponseWrapper wrapper = new CharResponseWrapper(response);

    // Run the include
    dispatcher.include(request, wrapper);

    String result = wrapper.toString();

    // Create a model with the returned string
    final IModelFactory modelFactory = context.getModelFactory();
    final IModel model = modelFactory.parse(context.getTemplateData(), result);

    // Instruct the engine to replace this entire element with the specified model
    structureHandler.replaceWith(model, false);

共有1个答案

夏侯腾
2023-03-14

您可以直接在Thymeleaf视图中访问request(通过使用#request对象,使您能够直接访问javax.servlet.http.httpservletrequest对象)参数和session(通过使用#session对象,使您能够直接访问javax.servlet.http.httpsession对象)属性:

${#request.getAttribute('foo')}
${#request.getParameter('foo')}
${#request.getContextPath()}
${#request.getRequestName()}

<p th:if="${#request.getParameter('yourParameter') != null
      th:text="${#request.getParameter('yourParameter')}"}">Request Param</p>

${#session.getAttribute('foo')}
${#session.id}
${#session.lastAccessedTime}

<p th:if="${session != null}"> th:text="${session.yourAttribute}"</p>

在这里阅读更多。

 类似资料:
  • 我遇到了一种情况,在处理请求之前,我必须更新它。基本上,我必须用一个可以随时间变化的属性来更新请求。要求消费者随请求一起发送属性是不实际的..所以,我觉得唯一的办法就是..在处理请求之前,更新控制器方法中的请求.. 到目前为止,控制器方法中使用了HttpServletRequest。然后将请求读取为流,然后将其转换为json字符串进行处理。我正在考虑用@RequestBody替换它,并将请求读入p

  • 我有一个具有脱机功能的单页web应用程序(即,它可以在不访问应用程序服务器的情况下工作)。我需要提供SAML身份验证,据我所知,身份提供者将通过HTTP Post将响应返回到我的应用程序服务器。 我已经实现了一个HTTPendpoint(Java servlet),它接收IdP响应和断言,并将用户登录到应用程序中,但如果应用程序正在脱机使用,这当然不起作用。 是否有一种方法可以在浏览器中“处理”S

  • 问题内容: 我有一个应用程序,它基本上是服务的代理。该应用程序本身是在Jersey上构建的,由Jetty提供。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。除了一个细节外,UriInfo和HttpServletRequest被适当地注入:似乎没有参数。这是我从终端发送的请求: 此处的POST正文显然包含两个参数:foo和biz。但是,当我尝试在代码()中获取它们时,结果是

  • 我有一个应用程序,基本上是一个服务的代理。该应用程序本身是基于Jersey构建的,由Jetty提供服务。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。UriInfo和HttpServletRequest被适当地注入,除了一个细节:似乎没有参数。这是我从终端发送的请求: 这里,POST正文显然包含两个参数:foo和biz。但当我尝试在代码中获取它们时(),结果是一个大小为0

  • 我使用以下方法注册了身份验证器:

  • 主要内容:1. 什么是标准方言?,2. 标准表达式语法,2.7 表达式预处理,3. 基本的属性本节将带您了解一些最重要的概念,以了解以标准或SpringStandard方言编写的Thymeleaf模板。 1. 什么是标准方言? Thymeleaf是非常非常可扩展的,它允许自定义的名字来定义一组模板属性(或者甚至是标签),用自定语法评估计算表达式和应用逻辑。它更像是一个模板引擎框架。 它还带有一些称为标准方言(称为Standard和SpringStandard)的东西,它们定义了一组功能,这