【问题标题】:How to convert piece of JSP to the Thymeleaf syntax?如何将一段 JSP 转换为 Thymeleaf 语法​​?
【发布时间】:2015-01-22 13:51:45
【问题描述】:

我有一些 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>

【问题讨论】:

    标签: java spring jsp thymeleaf


    【解决方案1】:

    在我看来,实现这一点的最佳方法是创建一个自定义 AttrProcessor,它基于“portfolioWorks”变量设置类属性值。所以它看起来像:

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


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

    我还建议您查看 thymeleaf 资源,有很多不同的 attr 处理器,因此您将能够更快地了解这个想法。

    【讨论】:

      【解决方案2】:

      您可以使用 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:if 可以很容易地用 th:if 或 th:unlessth:block /em> 然后你在里面处理你的 div 块。

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2019-03-25
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多