Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一段JSP转换为Thymeleaf语法?_Java_Spring_Jsp_Thymeleaf - Fatal编程技术网

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

Java 如何将一段JSP转换为Thymeleaf语法?,java,spring,jsp,thymeleaf,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()

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

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

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


看看:

我还建议您查看thymeleaf源代码,有很多不同的attr处理器,因此您可以更快地了解情况。

您可以使用th:with属性设置变量,但不幸的是,它仅在定义它的块中可见。()因此,您需要稍微修改您的逻辑

<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:除非更新到th:block,然后在其中处理div块

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

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