使用百里香叶的条件属性

时间:2014-05-18 19:30:33

标签: jsp thymeleaf

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

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

但我如何使用百里香?

的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>

但这似乎不是最好的方法。那么如何为百里香叶上的属性创建一个if语句呢?

4 个答案:

答案 0 :(得分:27)

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

<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">

答案 1 :(得分:6)

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

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

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

否则,我没有看到使用条件脚本标记的第二种方法存在问题。我经常在我的组件中这样做。

答案 2 :(得分:2)

yorgos答案应该是公认的答案。我对disabled

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

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

答案 3 :(得分:1)

正确的语法如下:

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