【问题标题】:Thymeleaf: th:text only if not null?Thymeleaf:th:text 只有在不为空的情况下?
【发布时间】:2015-10-10 00:33:00
【问题描述】:

我有类似下面的内容,如果用户之前输入了错误的凭据,这当然可以。

但是,如果我直接转到我的登录失败 URL /login?error,例如之前没有任何错误登录,session[SPRING_SECURITY_LAST_EXCEPTION] 当然是 null,我会得到一个讨厌的 404

<span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>

问题

是否有类似下面的处理器(大部分时间写和读太长),还是我应该自己动手?

<span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION] != null ? session[SPRING_SECURITY_LAST_EXCEPTION].message : #messages.msg('AbstractUserDetailsAuthenticationProvider.badCredentials')}">
    Invalid credentials
</span>

【问题讨论】:

    标签: jsp thymeleaf template-engine


    【解决方案1】:

    你可以使用 th:if 语句:

    <span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message}" th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>
    

    只有存在值时才会显示这一行。

    编辑 1:

    额外检查:

    <span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION] != null and session[SPRING_SECURITY_LAST_EXCEPTION].message != null}" th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>
    

    【讨论】:

    • 如果session[SPRING_SECURITY_LAST_EXCEPTION]为空,它会在.message上抛出一个NPE
    • 不是这种情况,如果它是 null 那么 if 语句是 FALSE 因此 th:text 不会被渲染。
    • 这是你写的th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message}"
    • 我已经编辑了答案以添加另一层测试,以防万一它对你不起作用(它对我做了类似的事情)。
    【解决方案2】:

    试试这个代码,它更优化:

    ${session['SPRING_SECURITY_LAST_EXCEPTION']?.message}
    

    ? - 检查资源是否不为空

    【讨论】:

    • 这很有效,而且非常简洁!它在任何地方都有记录吗?我在 thymeleaf 的文档中没有看到它。
    【解决方案3】:

    试试这个:

    <span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message != null}">
        <span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>
    </span>
    

    【讨论】:

      【解决方案4】:

      在您的控制器中将空字符串变量设置为

      String nullvalue="";
      model.addAttribute("nullvalue",nullvalue);
      model.addAttribute("entity",entity);
      

      然后在你的视图类中,就像在百里香中一样

      <td data-th-if="${entity.field != nullvalue}">ok</td>
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2017-12-06
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 2018-01-10
        • 2017-02-05
        • 2011-10-16
        相关资源
        最近更新 更多