Thymeleaf列表包含

时间:2018-02-08 20:49:57

标签: list spring-boot thymeleaf contains

我使用的是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;)}

3 个答案:

答案 0 :(得分:0)

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

<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

答案 1 :(得分:0)

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

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

回顾一下,数据变量是字符串的ArrayList。 numvar变量是一个int数。要比较两者,你必须将numvar包装在单引号周围,这就是你必须要做的。感谢Metroids指出它。

答案 2 :(得分:0)

找到数组中的值,这对我有用:

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