2015-11-18 116 views
0

我有以下的JSP循環的foreach VAR是不可見的從JSP inlude

  ... 
      <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> 
        ... 

現在是編譯好的,我看到預期的結果: enter image description here

我想提取最後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> 

和這個重構後,我看到下面的結果:

enter image description here

正如你所看到的變量不會被渲染。

如何解決?

+0

的_方式_你有其他的JSP事項。關於_ [請參閱[此答案](http://stackoverflow.com/a/14763794/17300))[包含帶有JSP include指令的文件,JSP include操作和使用JSP Tag文件的區別?](http:// stackoverflow .com/q/14580120/17300)_ –

+0

@Stephen P你認爲jsp:include對我的情況是錯誤的嗎? – gstackoverflow

+0

是...'<%@ include ...>'是我想要的形式。查看[這個答案](http://stackoverflow.com/a/943789/17300)to _ [帶有「included」頁面的jsp頁面中的變量](http://stackoverflow.com/q/943770/17300)_ –

回答

0

一個.jsp文件被轉換爲.java文件,它被編譯並運行,提供最終發送到瀏覽器的輸出。

當你有一個jsp 如何那些得到翻譯和編譯取決於它的形式包括使用內另一個JSP。

<jsp:include page="incpage.jsp">轉換和編譯mainpage.jspincpage.jsp分別並插入incpage.jsp的在輸出包括位置。考慮到這種情況,incpage.jsp是mainpage.jsp的獨立,所以(自然)不能訪問這些變量。

<%@include file="incpage.jsp">更像是一個ç#include其中incpage.jsp的內容之前翻譯和編譯發生複製到mainpage.jsp 。在這種情況下,即使inpage具有.jsp擴展名也沒有關係。

如果您希望包含的文件作爲主文件的一部分,因爲它似乎你這樣做,你可以使用的第二種形式包括 - <%@include ...>