2013-05-26 8 views
0

JSP로 실행되지 않는 사용자 정의 태그가 있습니다. 태그는 내 데이터베이스에서 쿼리를 실행하고 그 값을 JSP로 반환하기로되어 있지만 데이터베이스에 0이 아닌 값이 있다는 사실을 알게되면 내 페이지에 0이 생깁니다. 내가 디버그 모드에서 응용 프로그램을 실행하고 태그가 어떤 이유로 호출되지 않습니다,하지만 태그가 존재하더라도 어떤 이유로 NullPointerException을 받고있는 것 같습니다. 다음은 JSP의 관련 부분입니다. 이 부분은 쿠키가있는 경우에만 나타납니다.Spring 3 - JSP가 사용자 정의 태그를 실행하지 않음

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 

<td><myTag1:poll1 /> <c:choose> 
     <c:when test="${foundCookiePoll1 == true}"> 
      <table> 
       <tr> 
        <td><b><i>Poll #1 -- </i></b>Would you like to have a 
         30-year reunion in 2016?<br></td> 
       </tr> 
       <tr> 
        <td><b>Yes</b></td> 
        <td>&nbsp;&ndash;&nbsp;<c:out value='${poll1Yes}' /><br />      </td> 
       </tr> 
       <tr> 
        <td><b>No</b></td> 
        <td>&nbsp;&ndash;&nbsp;<c:out value='${poll1No}' /><br />      </td> 
       </tr> 
      </table> 
     </c:when> 

여기 내 태그입니다.

public void doTag(HttpServletRequest request) 
     throws JspException, IOException { 
    PageContext pageContext = (PageContext) getJspContext(); 
    HttpSession session = request.getSession(true); 
    ServletContext servletContext = session.getServletContext(); 
    WebApplicationContext wac = WebApplicationContextUtils 
      .getRequiredWebApplicationContext(servletContext); 
    Poll1DAO poll1DAO = (Poll1DAO) wac.getBean("poll1DAO"); 

    pageContext.setAttribute("foundCookiePoll1", cookieFound()); 
    if (cookieFound()) { 
     HashMap<String, Object> poll1Votes = poll1DAO.getVotes(); 
     pageContext.setAttribute("poll1Yes", (int) poll1Votes.get("yes")); 
     pageContext.setAttribute("poll1No", (int) poll1Votes.get("no")); 
    } 
} 

private boolean cookieFound() { 
    PageContext pageContext = (PageContext) getJspContext(); 
    HttpServletRequest request = (HttpServletRequest) pageContext 
      .getRequest(); 
    Cookie[] cookies = request.getCookies(); 

    if (cookies == null) { 
     return false; 
    } 

    for (int i = 0; i < cookies.length; i++) { 
     if (cookies[i].getName().equals("poll1")) { 
      return true; 
     } 
    } 

    return false; 
} 

다음은이 태그에 대한 내 tld.xml입니다.

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd"> 
<taglib> 
    <tlib-version>1.0</tlib-version> 
    <jsp-version>2.0</jsp-version> 
    <short-name>Poll1Tag</short-name> 
    <uri>poll1</uri> 
    <tag> 
     <name>poll1</name> 
     <tag-class>com.tags.Poll1Tag</tag-class> 
     <body-content>empty</body-content> 
    </tag> 
</taglib> 
+1

'$ poll1No}'는 오타가 있습니까? 아니면 당신이 정말로 오프닝'{'? –

+0

오타입니다. 방금 원본 게시물에 고정 시켰습니다. 나는 그것을 놓쳤다는 것을 믿을 수 없다. 원래 코드에는 {이 (가) 있습니다. –

+0

태그에 println을 넣고 다시 확인하십시오 (확실하게). JSP 태그 lib 지시문과 TLD xml도 게시하십시오. –

답변

-1

이렇게하는 것이 가장 좋은 방법은 아니지만 페이지의 컨트롤러 방법에서 이렇게하십시오.

if (cookies != null) { 
     for (int i = 0; i < cookies.length; i++) { 
      if (cookies[i].getName().equals("poll1")) { 
       HashMap<String, Object> poll1Votes = poll1DAO.getVotes(); 
       model.addAttribute("poll1Yes", (int) poll1Votes.get("yes")); 
       model.addAttribute("poll1No", (int) poll1Votes.get("no")); 
      } 
     } 
    } 

JSP에서 이와 같은 변수를 참조하십시오.

<%= poll1Yes %> 

이와 같은 변수를 가져옵니다.

int poll1Yes = (Integer) request.getAttribute("poll1Yes"); 
int poll1No = (Integer) request.getAttribute("poll1No"); 
+0

-1 –