Jsp 胸腺素渲染

Jsp 胸腺素渲染,jsp,thymeleaf,Jsp,Thymeleaf,使用jsp,我们可以将html元素呈现为 <c:set var="size" value="0" /> <c:forEach items="${fields}" var="field" varStatus="status"> <c:if="${status.first}"> <div class="row"> </c:if> <c:set var="size" value="${size

使用jsp,我们可以将html元素呈现为

<c:set var="size" value="0" />
<c:forEach items="${fields}" var="field" varStatus="status">

    <c:if="${status.first}">
        <div class="row">
    </c:if>

    <c:set var="size" value="${size + field.size}" />
    <c:if="${size > 12}">
        </div>
        <div class="row">
        <c:set var="size" value="${field.size}" />
    </c:if>

    <jsp:include page="/WEB-INF/jsp/field.jsp" >
        <jsp:param name="field" value="${field}"/>
    </jsp:include>  

    <c:if="${status.last}">
        </div>
    </c:if>

</c:forEach>

在这里,我根据字段的大小(大小6变为span6)在
中构建htmls输入元素。如果“我的字段”列表有4个大小分别为6、3、8和4的元素,它会将html呈现为

<div class="row">
  <div class="span6">
     <input />
  <div>
  <div class="span3">
     <input />
   <div>
</div>
<div class="row">
  <div class="span8">
     <input />
  <div>
  <div class="span4">
     <input />
   <div>
</div>

我试图将前几个部分转换为thymeleaf,如下所示

<th:block th:with="size=0">
    <th:block th:each="field, iterStat : ${fields}">
        <th:block if="${iterStat.index == 0}">  
            <div class="row">
        </th:block> 
            <th:block if="${iterStat.index == (#lists.size(${fields}) - 1)}">   
            </div>
        </th:block>
    </th:block> 
</th:block> 

但是thymeleaf不能呈现它,因为div标记
在它开始的
中没有关闭。 有没有办法将上面的jsp代码转换为thymeleaf


我正在使用thymeleaf 2.0.17和spring3

如果我是您,我将使用以下代码,这将实现关注点分离,也将实现您正在尝试的操作:

首先创建一个类,该类负责从大小列表创建子列表。 为了使用Thymeleaf轻松使用这个类,我们可以将这个类设置为Springbean。 下面是一段可以完成这项工作的粗略代码:

@Component
public class BoostrapUtility {

   public List<List<Integer>> createSubLists(Collection<Integer> sizeList) {
        final List<List<Integer>> results = new ArrayList<>();

        final int maxSize = 12;
        int rowSize = 0;
        List<Integer> subList = new ArrayList<>();
        for (Integer size : sizeList) {
            if(rowSize + size <= maxSize) {
                subList.add(size);
                rowSize += size;
            }
            else {
                results.add(subList);
                subList = new ArrayList<>();
                subList.add(size);
                rowSize = size;
            }
        }
        if(!subList.isEmpty()) {
            results.add(subList);
        }

        return results;
   }
}
@组件
公共类布尔运算{
公共列表CreateSubList(集合大小列表){
最终列表结果=新建ArrayList();
最终int maxSize=12;
int rowSize=0;
列表子列表=新的ArrayList();
用于(整数大小:sizeList){

如果(rowSize+size如果我是你,我将使用以下代码,这将实现关注点的分离,也将实现你试图做的事情:

首先创建一个类,该类负责从大小列表创建子列表。 为了使用Thymeleaf轻松使用这个类,我们可以将这个类设置为Springbean。 下面是一段可以完成这项工作的粗略代码:

@Component
public class BoostrapUtility {

   public List<List<Integer>> createSubLists(Collection<Integer> sizeList) {
        final List<List<Integer>> results = new ArrayList<>();

        final int maxSize = 12;
        int rowSize = 0;
        List<Integer> subList = new ArrayList<>();
        for (Integer size : sizeList) {
            if(rowSize + size <= maxSize) {
                subList.add(size);
                rowSize += size;
            }
            else {
                results.add(subList);
                subList = new ArrayList<>();
                subList.add(size);
                rowSize = size;
            }
        }
        if(!subList.isEmpty()) {
            results.add(subList);
        }

        return results;
   }
}
@组件
公共类布尔运算{
公共列表CreateSubList(集合大小列表){
最终列表结果=新建ArrayList();
最终int maxSize=12;
int rowSize=0;
列表子列表=新的ArrayList();
用于(整数大小:sizeList){
如果(行大小+大小)