2015-11-18 117 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 ...>