我使用的是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,"numvar")}
答案 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}">