从 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 个解决方案:

  1. 使用<%@ include file="confirmWithDrawModal.jsp" %>
  2. 使用这个建议

我不确定哪种方法更好

一个 .jsp 文件被翻译成一个 .java 文件,该文件被编译并 运行,提供最终发送到浏览器的输出。

当您在 jsp 中包含另一个 jsp 时 如何 翻译和编译这些内容取决于 include你用。

<jsp:include page="incpage.jsp">分别编译mainpage.jspincpage.jsp 并在 include 位置插入 incpage.jsp 的输出。考虑到这种情况,incpage.jsp 是 mainpage.jsp 的 独立 ,因此(自然地)无法访问这些变量。

<%@include file="incpage.jsp"> 更像是 C #include 其中 incpage.jsp 的内容被复制到 mainpage.jsp before 进行翻译和编译。在这种情况下,inpage 是否具有 .jsp 扩展名甚至无关紧要。

如果您希望包含文件作为主文件的一部分,就像您看起来那样,您可以使用第二种形式的包含 — <%@include ...>