2014-04-21 3 views
1

는 foreach는 항목 배열 목록을자바의 ArrayList는 내가 원하는 (<c: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} 

잘못 무엇인가?

+0

JSP가 프리젠 테이션 용으로 사용하는 경우에만 제공되며이 링크를 체크 아웃, 그래서 서블릿의 목록을 채우는과 JSP로 다시 전달하려고합니다. –

+1

스크립틀릿 내부에서 jstl을 사용할 수 없습니다 .. JSP 라이프 사이클 및 태그 라이브러리를 통해 이동하십시오 ... – Shashi

+0

@ maxx777 생성 된 서블릿은 $ {result.fname}을 정적 값으로 인식합니다 .. – Shashi

답변

2

당신은 스크립틀릿 내부 JSTL을 사용할 수 없습니다 ..

저장 페이지 범위에 <c:set>를 사용 ${result.fname}의 값. 그리고 스크립틀릿 내부의 변수를 사용하십시오.

자세한 내용

<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

UPDATE

EL 특성이 범위에 저장된 - 페이지 요청 세션 어플리케이션 태그 예는 범위를 지정하지 않기 때문에, 따라서이 같은 그것을 얻을 수 있습니다 :

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

참고한다 :

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

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

는 대안 스크립틀릿 변수를 생성 useBean 태그의 기능을 악용 EL 변수와 Scriptlet 변수는 처음에 같은 String을 가리키고 있습니다. 그러나 스크립틀릿 코드에서 문자열을 변경하면 EL 변수가 변경되지 않은 채로 가리키는 값이 변경됩니다.

+0

l.add (fname)를 추가 할 때; 기호 오류 – Beginner

+0

을 찾을 수 없습니다. @Beginner 응답 확인 ... – Shashi

+0

감사합니다. @Shashi. 지금 코드 작업 올바른 (죄송 내 영어 매우 나쁨) – Beginner

1

따옴표를 사용하여 ${result.fname}을 (를) 추가 할 때. JVM은 그것을 문자열 리터럴로 간주합니다. 그래서 당신은 이런 결과를 얻고 있습니다.