1

我检查当前 URL 是否以“/”结尾,然后变量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是空的。

4

1 回答 1

2

这与 Tiles 无关。即使使用 <jsp:include …/> 你也会遇到同样的问题

<c:set .../> 默认情况下将变量放入页面范围。您需要执行以下操作才能使这些变量在下一页中也可用

<c:set var="slash" value="/" scope="request"/>
于 2013-07-02T09:47:15.530 回答