【问题标题】:Loop foreach var is not visible from jsp inlude从 jsp include 中看不到循环 foreach var
【发布时间】:2016-02-20 16:49:01
【问题描述】:

我有以下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>

在此重构之后,我看到以下结果:

如您所见,变量未呈现。

如何解决?

【问题讨论】:

标签: java jsp foreach jspinclude


【解决方案1】:

我找到了 2 个解决方案:

  1. 使用&lt;%@ include file="confirmWithDrawModal.jsp" %&gt;
  2. 使用此建议https://stackoverflow.com/a/8003143/2674303

我不确定哪种方法更好

【讨论】:

    【解决方案2】:

    .jsp 文件被转换为 .java 文件,该文件被编译并运行,提供最终发送到浏览器的输出。

    当你在一个jsp中包含另一个jsp时如何翻译和编译它们取决于你使用哪种形式的include

    &lt;jsp:include page="incpage.jsp"&gt; 翻译和编译 mainpage.jspincpage.jsp 单独 并将 incpage.jsp 的输出插入到 包括位置。考虑到这种情况,incpage.jsp 独立于 mainpage.jsp,因此(自然)无法访问这些变量。

    &lt;%@include file="incpage.jsp"&gt; 更像是一个 C #include,其中 incpage.jsp 的内容被复制到 mainpage.jsp 翻译和编译发生之前。在这种情况下,即使 inpage 具有 .jsp 扩展名也没关系。

    如果您希望包含的文件充当主文件的一部分,就像您所做的那样,您可以使用第二种形式的包含 — &lt;%@include ...&gt;

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2014-03-24
      • 2021-12-25
      • 2020-08-25
      • 2020-02-19
      • 2016-12-31
      相关资源
      最近更新 更多