在Scriptlet中访问JSTL变量

时间:2014-05-18 13:19:37

标签: java jsp jstl el

嗨我想在scriplet中使用jstl变量我想在num == 3时打印一个“hello”它尝试获取以下代码但是i的值仍为零。

我想获取num的值并将其递增1然后检查num==3然后在条件为真时打印hello再次将值重新分配为零。<​​/ p>

<c:set var="num" value="0"></c:set>
                <c:forEach items="${requestScope.Products}" var="emp" begin="0" end="${size}" >

                    <c:if test="${num==3}">
                    <h1>hello</h1>

                    </c:if>
                    <%! int var=0;%>
                    <% var=Integer.parseInt(pageContext.getAttribute("num").toString());%>
                <%

                System.out.println(var);

                     var=var+1;%>
                    <h2><c:out value="${num}"></c:out></h2>


                <td width="100">
                    <img src="images/${emp.image}" width="100" height="100"/>
                    Title<p>${emp.title}</p>
                    Price<p>${emp.price}</p>
                    <input type="submit" value="Buy No" class="bluebutton"/>
                </c:forEach>

修改

我想连续显示最多3条记录,就像我15条记录一样,那么会有5行。当我像这样写

时,会有3列问题
<tr> <td>${tile}</td> <td>price<td> 

在for循环中它显示第一条记录3次,但我希望每列都有新记录。

这是我修改后的代码:

<% int size=Integer.parseInt(request.getAttribute("size").toString());

    %>
    <h1><%= size%></h1>
    <table border="1" width="50%">


                <tr >
                  <c:set var="num" value="0"></c:set>
                  <c:forEach items="${requestScope.Products}" var="emp" begin="0" end="${size}" varStatus="loop">

                 <c:choose>
                  <c:when test="${num==3}">
                  <tr>

                  </tr>
                       <c:set var="num" value="0"></c:set>
                        </c:when>
                       <c:otherwise>
                            <td width="100">
                        <img src="images/${emp.image}" width="100" height="100"/>
                        Title<p>${emp.title}</p>
                        Price<p>${emp.price}</p>
                        <input type="submit" value="Buy No" class="bluebutton"/>
                 </td>
                       </c:otherwise>
                       </c:choose>
                        <c:set var="num" value="${num + 1}" />
                        <h2><c:out value="${num}"></c:out></h2>
                  </c:forEach>

                </tr>


        </table>

2 个答案:

答案 0 :(得分:1)

我想获取num的值并将其递增1然后检查num == 3然后打印hello一旦condition为true reassgin value再次为零

阅读内联评论以获取更多信息。

示例代码:(根据您的要求修改)

<c:set var="num" value="0"></c:set> <!-- initial value -->
<c:forEach items="${requestScope.Products}" var="emp">

    <c:if test="${num==3}">
        <h1>hello</h1>
        <c:set var="num" value="0"></c:set> <!-- re-initialize value -->
    </c:if>
    <c:set var="num" value="${num + 1}" /> <!-- increment value -->
    <h2>
        <c:out value="${num}"></c:out>
    </h2>

</c:forEach>

修改

我想连续显示最多3条记录,就像我15条记录一样,那么会有5行。并且在行中将有3列。

<c:set var="Products" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" scope="request"/>

<c:set var="beginTR" value="true" /> <!-- to check for tr start -->
<table border="1">
    <c:forEach items="${requestScope.Products}" var="emp"
        varStatus="status">

        <c:if test="${status.index%3==0}"> <!-- check for columns no -->
            <c:if test="${beginTR}">
                <tr>
                    <c:set var="beginTR" value="false" />
            </c:if>
            <c:if test="${!beginTR}">
                </tr>
                <c:set var="beginTR" value="true" />
            </c:if>
        </c:if>
        <td>
              <c:out value="${emp}"></c:out> <!-- Fit your actual code here -->
        </td>
    </c:forEach>
</table>

截图:

enter image description here

答案 1 :(得分:0)

<c:forEach items="${Products}" var="emp" begin="0" end="${size}" varStatus="status" >
   <c:if test="${status.index==3}">
      <h1>hello</h1>
   </c:if>
</c:forEach>