如何将JSP片段转换为Thymeleaf语法?

时间:2015-01-22 13:51:45

标签: java spring jsp thymeleaf

我有一些JSP,我想要转换为Thymeleaf:

<c:forEach var="portfolioWork" items="${portfolioWorks}" varStatus="statusVariable">

    <c:set var="stylesStr" value="" />
    <c:if test="${not empty portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
        <c:forEach  var="wRels" items="${portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
            <c:set var="stylesStr" value="${stylesStr} type${wRels.getPublicSitePortfolioWorkTypes().getId()} " />
        </c:forEach>
    </c:if>

<div class="element ${stylesStr} block">
*****************************************

我无法理解,如何转换这个复杂的结构:

<c:set var="stylesStr" value="" />
<c:if test="${not empty portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
    <c:forEach  var="wRels" items="${portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
        <c:set var="stylesStr" value="${stylesStr} type${wRels.getPublicSitePortfolioWorkTypes().getId()} " />
    </c:forEach>
</c:if>

2 个答案:

答案 0 :(得分:0)

从我的角度来看,实现这一点的最佳方法是创建一个自定义的AttrProcessor,它根据&#34; portfolioWorks&#34;设置类属性值。变量。所以它看起来像:

<div class="element block" some_scope:appendClass="${portfolioWorks}"></div>


看看:http://www.thymeleaf.org/doc/tutorials/2.1/extendingthymeleaf.html#attribute-processors

我也建议通过百万富翁来源查看,有很多不同的attr处理器,所以你可以更快地得到这个想法。

答案 1 :(得分:0)

您可以使用 th:with 属性来设置变量,但不幸的是,它仅在定义它的块中可见。 (http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables)因此,你需要修改一下你的逻辑。

<c:if test="${not empty portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
   <c:forEach  var="wRels" items="${portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
      <div class="element ${wRels.getPublicSitePortfolioWorkTypes().getId()} block">
   </c:forEach>
</c:if>

<c:if test="${not empty portfolioWork.getPublicSitePortfolioWorksToTypeRelations()}">
   <div class="element block">
</c:if>

使用这样的逻辑 c:如果可以通过 th轻松更新到 th:block :if th:除非< / em>然后你在里面处理div块。

如果这看起来有点丑陋 - 你可以将其他html文件中的块定义为片段(th:fragment)并使用th:include并传递参数 $ {wRels.getPublicSitePortfolioWorkTypes()来调用它.getId ()} 里面。您可以在此处详细了解模板:http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#template-layout

如果您需要更多信息或详细信息,请告诉我:)