【问题标题】:Thymeleaf Lists ContainsThymeleaf 列表包含
【发布时间】:2018-02-08 20:49:57
【问题描述】:

我正在使用 Thymeleaf #lists.contains,但无法使此方案正常工作。

我在 Java 中有一个这样的 ArrayList:

List<String> data = new ArrayList<String>(); 

列表包含数字:[1,2,3]。现在在 Thymeleaf 中,我想检查一个数字是否在列表中,然后将我的复选框打印为选中状态,我正在尝试这个:

<input type="checkbox" th:if="${#lists.contains(data,1)}" name="checklist" checked="true" />
<input type="checkbox" th:unless="${#lists.contains(data,1)}" name="checklist" />

这不起作用。没有选中任何复选框。我本来希望列表中的 1 和 if 中的 1 匹配并选中复选框。

由于某种原因,Thymeleaf 不能这样工作。如果我将所有值都附加上类似 c 的内容,例如 ['c1','c2','c3'] 并对其进行测试,那么它可以完美运行。那么这是一个数字/字符串测试问题吗?如何在不向数字附加字符的情况下使其工作?

如果我将变量打印出来,我会得到:

${#lists.contains([1],1)} = false
${#lists.contains([1],'1')} = true

所以如果我必须在两边都使用变量,我将如何添加引号? 我试过了,但它不起作用:

${#lists.contains(data,&quot;numvar&quot;)}

【问题讨论】:

    标签: list spring-boot thymeleaf contains


    【解决方案1】:

    如果你有一个字符串数组,你必须使用字符串进行搜索:

    <input type="checkbox" th:if="${#lists.contains(data, '1')}" name="checklist" checked="true" />
    

    就像java:

    List<String> strings = new ArrayList<>(Arrays.asList("1","2","3"));
    System.out.println(strings.contains(1));   // returns false
    System.out.println(strings.contains("1")); // returns true
    

    如果您有一个整数数组,则必须使用整数进行搜索:

    <input type="checkbox" th:if="${#lists.contains(data, 1)}" name="checklist" checked="true" />
    

    就像java:

    List<Integer> integers = new ArrayList<>(Arrays.asList(1,2,3));
    System.out.println(integers.contains(1));   // returns true
    System.out.println(integers.contains("1")); // returns false
    

    【讨论】:

    • 谢谢。好的,所以我的列表(数据)是字符串,我的第二个变量是一个数字:lists.contains(data, number)。如何在数字变量周围放置单引号,以便它可以与数据字符串变量匹配?我试过了:lists.contains(data, &amp;apos;number&amp;apos;)
    【解决方案2】:

    所以我解决这个问题的方法是这样做:

    ${#lists.contains(data, '' + numvar + '')}
    

    回顾一下,数据变量是一个字符串数组列表。 numvar 变量是一个整数。要比较两者,您必须将 numvar 括在单引号中,这就是您必须这样做的方式。感谢 Metroids 指出这一点。

    【讨论】:

    • 注意:您实际上并没有将它们用单引号括起来。你正在做的是连接一个(空)字符串和一个数字——在java中,这会产生一个字符串。你不需要第二组单引号,这就足够了:${#lists.contains(data, '' + numvar)}
    • 感谢银河战士,你是 100% 正确的。使用一组引号更容易阅读。
    【解决方案3】:

    要在数组中查找值,这对我有用:

    <input type="checkbox" th:name="plates[]" th:checked="${#arrays.contains(array, 1)} ? 'checked'" th:value="${plate.id}">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多