JSTL代码不适用于Apache Tiles

时间:2013-06-30 14:37:34

标签: jsp jstl apache-tiles

我检查当前网址是否以'/'结尾,然后变量slash为空。否则slash是'/'。

<c:set var="slash" value="/"/>
<c:set var="uri" value="${requestScope['javax.servlet.forward.request_uri']}"/>
<c:if test="${fn:substring(uri, fn:length(uri)-1, fn:length(uri)) == '/'}">
   <c:set var="slash" value=""/>
</c:if>

接下来,基于变量slashuri,一些文本将附加到当前URL,并且新链接将构建。

<a href="${uri}${slash}${cd.toString()}/">${cd.toString()}</a>

当代码位于构建新URL的同一页面上时,它正在工作。当我应用Apache Tiles时,第一个代码放入main.jsp:

<body>
<c:set var="slash" value="/"/>
<c:set var="uri" value="${requestScope['javax.servlet.forward.request_uri']}"/>
<c:if test="${fn:substring(uri, fn:length(uri)-1, fn:length(uri)) == '/'}">
   <c:set var="slash" value=""/>
</c:if>

<div id="headerId">
  <tiles:insertAttribute name="header" />
</div>
<div id="bodyId">
  <tiles:insertAttribute name="content" />
</div>
</body>

并且链接是在content.jsp中构建的:

<a href="${uri}${slash}${cd.toString()}/">${cd.toString()}</a>

但在content.jsp中,变量urislash为空。

1 个答案:

答案 0 :(得分:2)

这与Tiles无关。即使使用&lt; jsp:include ... /&gt;

,您也会遇到同样的问题

&lt; c:set ... /&gt;默认情况下将变量放入页面范围。 您还需要执行以下操作,以便在下一页中提供这些变量

<c:set var="slash" value="/" scope="request"/>