一尘不染

在JSTL中使用的Java ArrayList()

jsp

我想要foreach项目添加数组列表

<sql:query var="query"  dataSource="${db}">

   select fname, lname from users where fname='ali'

</sql:query>

<c:forEach items="${query.rows}" var="result">

 <%

  ArrayList l= new ArrayList();
  l.add("${result.fname}");
  l.add("${result.lname}");


 for(int i=0; i<l.size(); i++)
   {
   out.println(l.get(i));
   }
 %>

</c:forEach>

输出结果:

${result.fname} ${result.lname}  ${result.fname} ${result.lname}  ${result.fname} ${result.lname}

怎么了 ?


阅读 351

收藏
2020-06-10

共1个答案

一尘不染

您不能在scriptlet中使用jstl。

保存的值${result.fname}<c:set>在页面范围内。并在scriptlet中使用变量。

例如

<c:forEach items="${query.rows}" var="result">
     <c:set var="lname" value="${result.lname}"  />
     <c:set var="fname" value="${result.fname}" />

     <%
         ArrayList l= new ArrayList();

         l.add((String)pageContext.getAttribute("fname"));
         l.add((String)pageContext.getAttribute("lname"));

         for(int i=0; i<l.size(); i++)
         {
             out.println(l.get(i));
         }
     %>


</c:forEach>

有关更多信息,请访问http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL4.html

http://javapapers.com/jsp/jsp-life-cycle-
explain/

http://docs.oracle.com/cd/E13222_01/wls/docs81/taglib/handler.html

更新

EL属性存储在范围-页面,请求,会话,应用程序中。<c:set>标签示例未指定范围,因此可以这样获得:

 <c:set var="fname" value="${result.fname}" />

  <%
       String fname = (String)pageContext.getAttribute("fname"); 
       System.out.println(fname);
  %>

或者,利用useBean创建脚本变量的标记功能:

<c:set var="fname" value="${result.fname}" />
<jsp:useBean id="fname" type="java.lang.String"/>
<%
  System.out.println(fname);
 %>

请注意,EL变量和Scriptlet变量最初指向相同的String。但是在scriptlet代码中更改字符串将更改其指向的值,而EL变量保持不变。

2020-06-10