너무어려웡
502
2017-05-30 21:47:08
8
2030

jstl 관련 질문입니다.



<c:forEach var="list" items="${list}" begin="1" end="2">
	<tr>
	   <td>${list}</td>
	</tr>
</c:forEach>


컨트롤러에서 list 값을 넣어서 jsp 에서 받아서 출력 하는 형식인데요...

list에 값이 있든 없든 2번을 돌려서 list에 값이 있으면 출력 하고

없으면 공백으로라도 테이블을 차지하게 하고싶은데...

어떻게 해야 할지 감이 안 잡히네요 ㅠㅠ.. 어찌하면 될까요?

0
0
  • 답변 8

  • EastGlow
    1k
    2017-05-30 21:53:05

    c:choose 나 c:if를 써서 ${list} 값이 null이나 공백이면 그냥 <tr> 공백 </tr> 이런식으로 해보세요.

    0
  • 너무어려웡
    502
    2017-05-30 21:55:39

    c:if로 null인지 구별하는 식으로 해봤는데 안 먹더라구요ㅠㅠ

    0
  • _UnKnowN_
    291
    2017-05-30 22:06:23

    저라면 리스트에 기본값으로 빈데이터 두개를 넣고 

    입력받는 처음 두개 데이터는 데이터 치환, 세번째부턴 추가하는 방식으로 짤거 같아용 ㅡㅁㅡ

    0
  • ee32321
    1k
    2017-05-30 23:42:47 작성 2017-05-31 00:07:39 수정됨

    컨트롤러에서 list 값을 넣어서 jsp 에서 받아서 출력 하는 형식인데요...

    list에 값이 있든 없든 2번을 돌려서 list에 값이 있으면 출력 하고

    없으면 공백으로라도 테이블을 차지하게 하고싶은데...

    어떻게 해야 할지 감이 안 잡히네요 ㅠㅠ.. 어찌하면 될까요?



    <c:forEach var="list" items="${list}" begin="1" end="2">
    	<tr>
    	   <td>${list}</td>
    	</tr>
    </c:forEach>


    질문하신 내용입니다.


    jstl로 된 사용은 익숙하지가 않네요.질문에 답변해 봅니다.


    JSP라면, 이렇게 되겠죠.


    <%
    if(list==null){
    	for(int i=1;i<3;i++){
    		for(int i=0; i< list.length;i++){%>
    		<tr>
    		<td><%=list[i] %></td>
    		</tr>
    		<%}
    		}
    	}else if(list==null){
    			for(int i=1;i<3;i++){
    				for(int i=0; i< list.length;i++){%>
    				<tr>
    				<td><%=list[i] %></td>
    				</tr>
    				<%}
    		}
    	}
    %>


    list[i]가 아닐 것 같네요. 배열일때 이렇게 사용하는데, list를 찾아보시면, 아마, for믄에서 어떻게 반복할 수 있는지 나올겁니다. 

     또 nullpointer Exception이 나올 수 있습니다. list가 null이라면요. 그럴 경우.


    <%
    try{
       if(list==null){
      
           for(int i=1;i<3;i++){
              for(int i=0; i< list.length;i++){
              %>
                 <tr>
                       <td><%=list[i] %></td>
                </tr>
                 <%
              }
          }
     
       }else if(list!=null){
           for(int i=1;i<3;i++){
              for(int i=0; i< list.length;i++){
              %>
                 <tr>
                       <td><%=list[i] %></td>
                </tr>
              <%
          		}
           }
       }
     }catch(Exception e){
        e.printStackTrace();
       }
    
    %>



    답변을 자세히 달아봤네요. . 바로 다는 거라서, 틀리는 부분도 있을 겁니다. list를 for문으로 가져올 때, 위와 같은 방법이 아닌걸로 기억합니다. 답변을 달면, 개발이 잘되는 것 같습니다

    정보공유의 힘일까.. 생각해봅니다.


    참고로, for문은 이 향상된 for문을 사용해보세요. (java를 안한지 오래되어서, 이 부분은 인터넷검색해봤습니다. 관련 글 참고해서, 적어보네요.)


    ArrayList<string> list = new ArrayList<string>();
    
    int count = 0;
    list.add("Love");
    list.add("Baby");
    
    for(String str : list){
       System.out.println(count + " : " + str);
       count++;
    }


    0
  • 카즈머스
    91
    2017-05-30 23:44:06

    검색하시면 for 문처럼 강제로 몇번 돌릴 수 있습니다.

    그리고 변수이름 중복되면 곤란해요.

    0
  • 카즈머스
    91
    2017-05-30 23:45:00

    varStatus를 인덱스 처럼 사용할 스 있어요.

    0
  • 콰스웩스익조트
    440
    2017-05-31 00:32:11

    널검사만...

    <c:choose>
        <c:when test="${empty list}">
            <td></td>
        </c:when>
        <c:otherwise>
            <td>${list}</td>
        </c:otherwise>
    </c:choose>

    이렇게 해도 안된다면 리스트가 비어있지 않다고밖에 생각할수 없네요.

    1
  • suny4
    112
    2017-05-31 09:43:31

    무조건 두개의 tr만 있으면 되는건가요?


    그렇다면 아래처럼 해볼 수 있을 거 같네요.


    tr이 더 늘어난다면 다른 방법을 찾아봐야 할 것 같고요.


    <c:set var="list1"></c:set>
    <c:set var="list2"></c:set>
    <c:forEach var="list" items="${list}" begin="1" end="2" varStatus="listStatus">
      <c:choose>        
        <c:when test="${listStatus.first}">
          <c:set var="list1">${list}</c:set>
        </c:when>
        <c:otherwise>
          <c:set var="list2">${list}</c:set>
        </c:otherwise>
      </c:choose>
    </c:forEach>
    <tr>
      <td>${list1}</td>
    </tr>
    <tr>
      <td>${list2}</td>
    </tr>
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.