【问题标题】:Using Thymeleaf when the value is null当值为空时使用 Thymeleaf
【发布时间】:2014-01-05 08:25:33
【问题描述】:

我的数据库中有一些值如果尚未输入,则可能为空。

但是当我在我的 html 中使用 Thymeleaf 时,它在解析空值时会出错。

有什么办法可以解决吗?

【问题讨论】:

    标签: html null thymeleaf


    【解决方案1】:

    最短的方法是使用 '?'操作员。如果您有带有嵌入地址实体的用户实体,以便访问地址实体的字段并在地址不为空时打印它们,否则这里将是一个空列:

    <td th:text="${user?.address?.city}"></td>
    

    【讨论】:

    • ?. 运算符被称为“安全导航”运算符,根据 Spring Expression Language docs
    • 虽然上述语法在 thymeleaf 3.0.9 附带的 spring boot 2.0.5 中被接受为有效,但至少对我而言,它并没有做到这里所说的。这是您必须启用的特殊功能吗?
    • 这个功能不是来自 thymeleaf 而是来自 spring
    • 使用 ?在为 0 的数字字段上也会产生 false。因此,您需要对数字字段使用完整的 != null 条件。
    • 这是最好的答案,因为它更简洁
    【解决方案2】:

    当然有。例如,您可以使用conditional expressions。例如:

    <span th:text="${someObject.someProperty != null} ? ${someObject.someProperty} : 'null value!'">someValue</span>
    

    您甚至可以省略“else”表达式:

    <span th:text="${someObject.someProperty != null} ? ${someObject.someProperty}">someValue</span>
    

    您还可以查看Elvis operator 以显示如下默认值:-

    <span th:text="${someObject.someProperty} ?: 'default value'">someValue</span>
    

    【讨论】:

    • Edit: 为 if 条件添加了 ${...},因为您错过了它。为 th:text 中的三元表达式 +1。
    • 您能解释一下为什么需要多个 ${...} 吗?如果我想在这两种选择前加上例如前缀怎么办? '福:'。我是否必须在替代项中指定两次?
    • 您的答案应该被承认为解决方案。谢谢。
    【解决方案3】:

    这也可以使用elvis operator ?: 来处理,当字段为空时会添加一个默认值:

    <span th:text="${object.property} ?: 'default value'"></span>
    

    【讨论】:

    • 这可能是在 thymeleaf 中显示默认值的最优雅的方式。值得更多的支持!
    【解决方案4】:

    您可以将 'th:if' 与 'th:text' 一起使用

    <span th:if="${someObject.someProperty != null}" th:text="${someObject.someProperty}">someValue</span>
    

    【讨论】:

    • 不需要!= null,只要&lt;span th:if="${someObject.someProperty}" ...就够了
    • th:if 对于一个块为什么它不起作用?
    【解决方案5】:

    还值得查看#objects 内置帮助程序的文档: https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#objects

    还有有用的:${#objects.nullSafe(obj, default)}

    【讨论】:

      【解决方案6】:

      你在创建时做了两次检查

      ${someObject.someProperty != null} ? ${someObject.someProperty}
      

      你应该像下面这样干净和简单。

      <td th:text="${someObject.someProperty} ? ${someObject.someProperty} : 'null value!'"></td>
      

      【讨论】:

        【解决方案7】:
           <p data-th-text ="${#strings.defaultString(yourNullable,'defaultValueIfYourValueIsNull')}"></p>
        

        【讨论】:

          【解决方案8】:

          我用

          <div th:text ="${variable != null} ? (${variable != ''} ? ${variable} : 'empty string message') : 'null message' "></div>
          

          【讨论】:

            【解决方案9】:

            你可以使用这个对我有用的解决方案

            <span th:text="${#objects.nullSafe(doctor?.cabinet?.name,'')}"></span>
            

            【讨论】:

              【解决方案10】:

              最短路径!它对我有用, 其中 NA 是我的默认值。

              <td th:text="${ins.eValue!=null}? ${ins.eValue}:'NA'" />
              

              【讨论】:

                猜你喜欢
                • 2019-05-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-02-21
                • 1970-01-01
                • 2019-10-11
                • 1970-01-01
                • 2022-10-04
                相关资源
                最近更新 更多