Jsp 使用thymeleaf的条件属性

Jsp 使用thymeleaf的条件属性,jsp,thymeleaf,Jsp,Thymeleaf,我知道如何在jstl上的标记内创建条件属性: <body <c:if test="${userCreated}"> onload="somejavascriptfunction()"</c:if> > 到目前为止,我找到的唯一解决办法就是这样做 <script type="text/javascript" th:if="${userCreated}"> $(document).ready(function() { somejavas

我知道如何在jstl上的标记内创建条件属性:

<body <c:if test="${userCreated}"> onload="somejavascriptfunction()"</c:if> >
到目前为止,我找到的唯一解决办法就是这样做

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

$(文档).ready(函数(){
somejavascriptfunction()
});

但这似乎不是最好的方法。那么如何为thymeleaf上的属性生成if语句呢?

您是否尝试过使用th:attr处理器创建onload属性?我知道如果结果为空,有几个处理器将不会呈现属性。我不确定这是否适用于attr处理器

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

我这里没有可用的测试代码,但这可以工作。或者,您可以返回一个空的onload属性


否则,我看不出使用conditonal脚本标记的第二种方法有什么问题。我在我的组件中经常这样做。

考虑使用以下格式附加条件类,这确实有点违反直觉:

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

为了附加条件属性,将条件放在属性的值上,如下所示:

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

如果userSlug为null,则前面的语句将计算为:

<div>

如果userSlug不为null,则该语句的计算结果为:

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

约戈斯的答案应该是公认的答案。我对禁用的
也做了同样的操作

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


PS:我没有足够的声誉来写评论。

正确的语法如下:

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

您拥有的属性是正确的。要么属性的命名方式与您的命名方式不同,要么属性的值与您期望的不同。我会在页面上进行一些调试。您可以通过所有属性和值访问Thymeleaf${#HttpServletRequest}循环中的HttpServletRequest这是我调试它的方式

我想您不明白,也许我不够清楚。根据我对Thymeleaf的理解,您只能将th:if用于标记,而不能用于标记属性。现在我有一个条件脚本标记,但是如果我的body标记上有一个条件onload属性,那么这可以很容易地简化。您可以根据userCreated的布尔值为标记属性执行此操作,并将div类指定为true或false。。。。现在我想问你的问题是,为什么要在加载时执行一些javascript?Thymeleaf在服务器端呈现所有内容,看起来您并没有充分利用Thymeleaf。但对于onLoad属性,我将如何做到这一点。因为当我“重定向:/login”时,我有一个标志告诉我的视图用户是创建的,所以我可以显示一个成功框。一般来说,如果你想在答案上留下评论,但你没有足够的声誉,不要将其作为答案发布。相反,请等到您有50条代表评论作为答案发布,因为用户没有足够的代表,这些评论通常会被删除。然而,在这种情况下,我认为你的答案是正确的,因为它有效地提出了一种替代方法,所以在我看来这很好。
th:attr="attributeName=${condition}? 'conditionIsTrue' : 'conditionIsFalse'"