web-dev-qa-db-ja.com

thymeleafを使用した条件付き属性

私はjstlのタグ内に条件属性を作成する方法を知っています:

<body <c:if test="${userCreated}"> onload="somejavascriptfunction()"</c:if> >

しかし、thymeleafを使用してそれをどのように行うのですか?

IndexController

@RequestMapping("/register")
public String register(UserEntity user, @RequestParam String repeatedPassword, RedirectAttributes redirectAttributes) {
    user.setAdmin(false);
    userFacade.create(user);
    redirectAttributes.addFlashAttribute(Constants.USER_CREATED, true);
    logger.info("Usuario criado");
    return "redirect:/login";
}

これまでのところ私が見つけた唯一の解決策はこのようにすることでした

<script type="text/javascript" th:if="${userCreated}">
  $(document).ready(function() {
     somejavascriptfunction()
  });
</script>

しかし、それはそれを行うための最良の方法ではないようです。では、thymeleafの属性に対してifステートメントを作成するにはどうすればよいですか?

22
Davi Alves

次の形式を使用する条件付きクラスを追加することを考えると、それは本当に直観に反するものです。

<div th:classappend="${userSlug != null}?has-slug">

条件付き属性を追加するには、次のように属性の値に条件を設定します。

<div th:attrappend="data-path=${userSlug != null}?@{/myaccount/__${userSlug}__}">

UserSlugがnullの場合、前のステートメントは次のように評価されます。

<div>

UserSlugがnot nullの場合、ステートメントは次のように評価されます。

<div data-path="/myaccount/my-slug">
39
yorgo

th:attrプロセッサを使用してonload属性を作成してみましたか?結果がnullの場合に属性をレンダリングしないプロセッサがいくつかあります。これがattrプロセッサに適用されるかどうかはわかりません

<body th:attr="onload=${doOnload ? 'somejs()' : null}">
</body>

私はここで利用可能なテストコードを持っていませんが、これはうまくいくかもしれません。または、空のonload属性を返すこともできます。

それ以外の場合は、条件付きスクリプトタグを使用した2番目のアプローチで問題は発生しません。私はコンポーネントでこれを頻繁に行います。

6
Martin Frey

正しい構文は次のとおりです。

th:attr="attributeName=${condition}? 'conditionIsTrue' : 'conditionIsFalse'"
3
Tamb

ヨルゴスの答えは受け入れられた答えでなければなりません。同じことをdisabledでも行いました

<div th:each="f, t : ${user1.folders}">
    <input th:attrappend="disabled=${user2.folders[__${t.index}__].closed?'disabled'}" />
</div>

PS:私は代わりにコメントを書くのに十分な評判がありません。

3
thug-gamer