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

Thymeleaf自定义处理器-表达式+静态文本

东郭展
2023-03-14
<link rel="stylesheet" type="text/css" custom:href="/styles/main.css" />

这个想法是我在网站上有自定义的URL,所以我的自定义处理器将为提供的相对链接生成正确的URL。

上面的工作很好--但是,现在我希望能够在传递给处理器的值中包含变量--所以我遵循了thymeleaf文档中的示例,在生成替换URL的处理器中,我添加了StandardExpression的东西:

    @Override protected String getTargetAttributeValue( Arguments arguments, Element element, String attributeName ){
need this to see if it can be factored out
        final Configuration configuration = arguments.getConfiguration()
        final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration)
        final String attributeValue = element.getAttributeValue(attributeName)
        final IStandardExpression expression = parser.parseExpression(configuration, arguments, attributeValue)
        final String relativeUrl = (String) expression.execute(configuration, arguments)

        urlService.generateUrl( relativeUrl )
    }

我希望与此添加,我将能够也添加链接如下:

<link rel="stylesheet" type="text/css" custom:href="/styles/${user.name}/main.css" />
<link rel="stylesheet" type="text/css" custom:href="'/styles/main.css'" />

这看起来真的很难看,而且可能在简单的情况下不得不重复单引号(这将是大多数情况下)--有没有更好的方法来做到这一点?我希望表达式的内容都是基于花括号的,解析器应该有一种方法来识别有效表达式之外的任何内容都可以被视为字符串?

(老实说,我很难理解到底是怎么回事--javadocs看起来很稀疏,而且示例也不多--我花了很多时间阅读原始源代码,以确定我应该使用哪些类等等)

共有1个答案

蔡修远
2023-03-14

这个答案是在很长一段时间后,但将留在这里,为任何谁偶然发现这个问题。

Yout不需要自定义属性Provessor。Thymeleaf有一个内置的功能,可以满足您的要求,这就是链接URL输出表达式(链接到文档)。

要输出静态url,请如下所示:

<link ... th:href="@{/styles/main.css}" />
<link ... th:href="@{/styles/main.css(un=${user.name})}"/>
<link ... th:href="@{/styles/{un}/main.css(un=${user.name})}"/>
<link ... href="mysite/styles/rick/main.css"/>

这正是你所需要的。

乍一看,语法似乎很复杂。您应该仔细阅读文档以理解它。主要是Thymeleaf有3种花括号:

  • ${...}用于Thymeleaf文档所称的“变量表达式”。在您的例子中,这意味着Spring EL表达式,或者标准方言中的OGNL espressions
  • #{...}用于本地化消息键,而
  • @{...}用于链接URL输出,我们在这里讨论了
 类似资料:
  • django.contrib.staticfiles 从你的应用(和其他你指定的地方)收集所有静态文件到同一个地方,这样产品就能很容易的被维护 看看这里 对于静态文件的应用和一些用法示例的介绍,请参阅管理静态文件(CSS,图像) . 如果你想知道如何部署静态文件, 请参阅 部署静态文件. 设置 查看staticfiles settings了解更多设置细节 STATIC_ROOT STATIC_UR

  • 如果数据库表中的列名和等价的javabean对象名称不相似,那么我们可以通过使用自定义的对象来映射它们。 看下面的例子。 为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。创建一个示例应用程序。 更新在DBUtils入门程序中创建的文件:MainApp.java。 按照下面的说明编译并运行应用程序。 以下是的内容。 以下是文件的内容。 以下是文件的内容。 完成创建源文件后

  • 我试图加载一个自定义的NiFi处理器,但无法让NiFi加载所有的.nar依赖项,尽管尝试了各种pom.xml配置。我在SO上遇到过一些类似的问题,但还没有找到这个问题的答案。

  • 对于精度数学,只要可能,就会使用给定的准确值数值。例如,在比较中所用的数值与给定的值准确相同,无任何变化。在严格的SQL模式下,对于插入具有准确数据类型(DECIMAL或整数)的列的INSERT操作,如果值在列的允许范围内,将插入具有准确值的数值。检索时,所获得的值与插入的值应是相同(如果未采用严格模式,允许INSERT执行截短操作)。 对数值表达式的处理取决于表达式包含的值的类型: ·如果存在任

  • 前面我们介绍了如何输出静态页面,但是我们的网页往往包含了很多的静态文件,包括图片、JS、CSS 等,刚才创建的应用里面就创建了如下目录: ├── static │ ├── css │ ├── img │ └── js beego 默认注册了 static 目录为静态处理的目录,注册样式:URL 前缀和映射的目录(在/main.go文件中beego.Run()之

  • 问题内容: 我正在Django(1.11)上编写自己的自定义,并从auth0获取经过身份验证的用户的信息。这不是我第一次写它,我也不知道这个错误是从哪里来的: ImportError:模块“ auth.context_processors”未定义“ auth0_processors”属性/类 看起来是这样的: auth / settings.py: auth / context_processor