从 jsp 中看不到循环 foreach var include
Loop foreach var is not visible from jsp inlude
我有以下jsp
...
<table id="table" class="sortable">
<thead>
<tr>
<td class="head">Дата Запроса</td>
<td class="head">Сумма Запроса</td>
<td class="head">Баланс Владельца</td>
<td class="head">Статус Запроса</td>
<td class="head">Email</td>
<td class="head">-----</td>
</tr>
</thead>
<tbody>
<c:forEach var="event" items="${events}">
<tr>
<td>
<jsp:useBean id="dateValue" class="java.util.Date"/>
<jsp:setProperty name="dateValue" property="time"
value="${event.timestamp}"/>
<fmt:formatDate value="${dateValue}"
pattern="MM/dd/yyyy HH:mm"/>
</td>
<td>${event.amount}</td>
<td>${event.sourceUser.userAccounts.iterator().next().currentAmount}</td>
<td>${event.status}</td>
<td>${event.sourceUser.email}</td>
<td><c:if test="${event.status != 'SUCCESS'}">
<input type="button" class="withDraw"
value="подтвердить вывод"/>
</c:if>
<div class="edit-holder adt" id="">
<div class="edit-box">
<div class="title">Подтверждение вывода средств владельцем</div>
<form action="/admin/confirmWithdrawRequest"
method="post">
<div>
<input type="hidden" value="${event.id}" name="eventId"/>
<label>Статус</label>
<select name="status">
<c:forEach items="${statuses}" var="status">
<option <c:if test="${status == event.status}">
selected="selected"
</c:if>
>${status}</option>
</c:forEach>
</select>
<div class="clear"/>
</div>
<div>
<label>Email</label>
<input type="text" class="with-draw-input" name="email"
value="${event.sourceUser.email}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Текущий баланс</label>
<input type="text" class="with-draw-input" name="balance"
value="${event.sourceUser.userAccounts.iterator().next().currentAmount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Сумма запроса</label>
<input type="text" class="with-draw-input" name="email"
value="${event.amount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Комментарий модератора</label>
<textarea class="moderationComment"
name="moderationComment">${event.moderationComment}</textarea>
<div class="clear"/>
</div>
<input type="submit" class="btn" value="сохранить"/>
<div class="clear"></div>
</form>
<div class="close"></div>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
...
现在编译好了,我看到了预期的结果:
我想提取最后的 td
内容以像这样分隔 jsp:
<tbody>
<c:forEach var="event" items="${events}">
<tr>
<td>
<jsp:useBean id="dateValue" class="java.util.Date"/>
<jsp:setProperty name="dateValue" property="time"
value="${event.timestamp}"/>
<fmt:formatDate value="${dateValue}"
pattern="dd.MM.yyyy HH:mm:ss"/>
</td>
<td>${event.amount}</td>
<td>${event.sourceUser.userAccounts.iterator().next().currentAmount}</td>
<td>${event.status}</td>
<td>${event.sourceUser.email}</td>
<td><jsp:include page="confirmWithDrawModal.jsp"/>
</td>
</tr>
</c:forEach>
</tbody>
和confirmWithDrawModal.jsp
:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:if test="${event.status != 'SUCCESS'}">
<input type="button" class="withDraw"
value="подтвердить вывод"/>
</c:if>
<div class="edit-holder adt" id="">
<div class="edit-box">
<div class="title">Подтверждение вывода средств владельцем</div>
<form action="/admin/confirmWithdrawRequest"
method="post">
<div>
<input type="hidden" value="${event.id}" name="eventId"/>
<label>Статус</label>
<select name="status">
<c:forEach items="${statuses}" var="status">
<option <c:if test="${status == event.status}">
selected="selected"
</c:if>
>${status}</option>
</c:forEach>
</select>
<div class="clear"/>
</div>
<div>
<label>Email</label>
<input type="text" class="with-draw-input" name="email"
value="${event.sourceUser.email}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Текущий баланс</label>
<input type="text" class="with-draw-input" name="balance"
value="${event.sourceUser.userAccounts.iterator().next().currentAmount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Сумма запроса</label>
<input type="text" class="with-draw-input" name="email"
value="${event.amount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Комментарий модератора</label>
<textarea class="moderationComment"
name="moderationComment">${event.moderationComment}</textarea>
<div class="clear"/>
</div>
<input type="submit" class="btn" value="сохранить"/>
<div class="clear"></div>
</form>
<div class="close"></div>
</div>
</div>
在重构之后我看到以下结果:
如您所见,未呈现变量。
如何解决?
我找到了 2 个解决方案:
- 使用
<%@ include file="confirmWithDrawModal.jsp" %>
- 使用这个建议
我不确定哪种方法更好
一个 .jsp
文件被翻译成一个 .java
文件,该文件被编译并 运行,提供最终发送到浏览器的输出。
当您在 jsp 中包含另一个 jsp 时 如何 翻译和编译这些内容取决于 include你用。
<jsp:include page="incpage.jsp">
分别编译mainpage.jsp和incpage.jsp 并在 include 位置插入 incpage.jsp 的输出。考虑到这种情况,incpage.jsp 是 mainpage.jsp 的 独立 ,因此(自然地)无法访问这些变量。
<%@include file="incpage.jsp">
更像是 C #include
其中 incpage.jsp 的内容被复制到 mainpage.jsp before 进行翻译和编译。在这种情况下,inpage 是否具有 .jsp 扩展名甚至无关紧要。
如果您希望包含文件作为主文件的一部分,就像您看起来那样,您可以使用第二种形式的包含 — <%@include ...>
我有以下jsp
...
<table id="table" class="sortable">
<thead>
<tr>
<td class="head">Дата Запроса</td>
<td class="head">Сумма Запроса</td>
<td class="head">Баланс Владельца</td>
<td class="head">Статус Запроса</td>
<td class="head">Email</td>
<td class="head">-----</td>
</tr>
</thead>
<tbody>
<c:forEach var="event" items="${events}">
<tr>
<td>
<jsp:useBean id="dateValue" class="java.util.Date"/>
<jsp:setProperty name="dateValue" property="time"
value="${event.timestamp}"/>
<fmt:formatDate value="${dateValue}"
pattern="MM/dd/yyyy HH:mm"/>
</td>
<td>${event.amount}</td>
<td>${event.sourceUser.userAccounts.iterator().next().currentAmount}</td>
<td>${event.status}</td>
<td>${event.sourceUser.email}</td>
<td><c:if test="${event.status != 'SUCCESS'}">
<input type="button" class="withDraw"
value="подтвердить вывод"/>
</c:if>
<div class="edit-holder adt" id="">
<div class="edit-box">
<div class="title">Подтверждение вывода средств владельцем</div>
<form action="/admin/confirmWithdrawRequest"
method="post">
<div>
<input type="hidden" value="${event.id}" name="eventId"/>
<label>Статус</label>
<select name="status">
<c:forEach items="${statuses}" var="status">
<option <c:if test="${status == event.status}">
selected="selected"
</c:if>
>${status}</option>
</c:forEach>
</select>
<div class="clear"/>
</div>
<div>
<label>Email</label>
<input type="text" class="with-draw-input" name="email"
value="${event.sourceUser.email}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Текущий баланс</label>
<input type="text" class="with-draw-input" name="balance"
value="${event.sourceUser.userAccounts.iterator().next().currentAmount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Сумма запроса</label>
<input type="text" class="with-draw-input" name="email"
value="${event.amount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Комментарий модератора</label>
<textarea class="moderationComment"
name="moderationComment">${event.moderationComment}</textarea>
<div class="clear"/>
</div>
<input type="submit" class="btn" value="сохранить"/>
<div class="clear"></div>
</form>
<div class="close"></div>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
...
现在编译好了,我看到了预期的结果:
我想提取最后的 td
内容以像这样分隔 jsp:
<tbody>
<c:forEach var="event" items="${events}">
<tr>
<td>
<jsp:useBean id="dateValue" class="java.util.Date"/>
<jsp:setProperty name="dateValue" property="time"
value="${event.timestamp}"/>
<fmt:formatDate value="${dateValue}"
pattern="dd.MM.yyyy HH:mm:ss"/>
</td>
<td>${event.amount}</td>
<td>${event.sourceUser.userAccounts.iterator().next().currentAmount}</td>
<td>${event.status}</td>
<td>${event.sourceUser.email}</td>
<td><jsp:include page="confirmWithDrawModal.jsp"/>
</td>
</tr>
</c:forEach>
</tbody>
和confirmWithDrawModal.jsp
:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:if test="${event.status != 'SUCCESS'}">
<input type="button" class="withDraw"
value="подтвердить вывод"/>
</c:if>
<div class="edit-holder adt" id="">
<div class="edit-box">
<div class="title">Подтверждение вывода средств владельцем</div>
<form action="/admin/confirmWithdrawRequest"
method="post">
<div>
<input type="hidden" value="${event.id}" name="eventId"/>
<label>Статус</label>
<select name="status">
<c:forEach items="${statuses}" var="status">
<option <c:if test="${status == event.status}">
selected="selected"
</c:if>
>${status}</option>
</c:forEach>
</select>
<div class="clear"/>
</div>
<div>
<label>Email</label>
<input type="text" class="with-draw-input" name="email"
value="${event.sourceUser.email}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Текущий баланс</label>
<input type="text" class="with-draw-input" name="balance"
value="${event.sourceUser.userAccounts.iterator().next().currentAmount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Сумма запроса</label>
<input type="text" class="with-draw-input" name="email"
value="${event.amount}"
readonly/>
<div class="clear"/>
</div>
<div>
<label>Комментарий модератора</label>
<textarea class="moderationComment"
name="moderationComment">${event.moderationComment}</textarea>
<div class="clear"/>
</div>
<input type="submit" class="btn" value="сохранить"/>
<div class="clear"></div>
</form>
<div class="close"></div>
</div>
</div>
在重构之后我看到以下结果:
如您所见,未呈现变量。
如何解决?
我找到了 2 个解决方案:
- 使用
<%@ include file="confirmWithDrawModal.jsp" %>
- 使用这个建议
我不确定哪种方法更好
一个 .jsp
文件被翻译成一个 .java
文件,该文件被编译并 运行,提供最终发送到浏览器的输出。
当您在 jsp 中包含另一个 jsp 时 如何 翻译和编译这些内容取决于 include你用。
<jsp:include page="incpage.jsp">
分别编译mainpage.jsp和incpage.jsp 并在 include 位置插入 incpage.jsp 的输出。考虑到这种情况,incpage.jsp 是 mainpage.jsp 的 独立 ,因此(自然地)无法访问这些变量。
<%@include file="incpage.jsp">
更像是 C #include
其中 incpage.jsp 的内容被复制到 mainpage.jsp before 进行翻译和编译。在这种情况下,inpage 是否具有 .jsp 扩展名甚至无关紧要。
如果您希望包含文件作为主文件的一部分,就像您看起来那样,您可以使用第二种形式的包含 — <%@include ...>