2011-01-06 3 views
3

JSF 프로그램을 실행할 때 다음 예외가 있습니다.java.lang.IllegalStateException : 부모가 null이 아니지만이 구성 요소와 관련이 없음

org.apache.jasper.JasperException: An exception occurred processing JSP page /pages/general/internalServerErrorPage.jsp at line 44 

    41:    <link rel="shortcut icon" href="<%=request.getContextPath()%>/resources/images/infomindzicon.ico" type="image/x-icon" /> 
    42:   </head> 
    43:   <body id="sscmsMainBody"> 
    44:    <h:form id="internalServerErrorPageForm" binding="#{ServerErrorBean.initForm}"> 
    45:     <rich:page id="richPage" theme="#{LayoutSkinBean.layoutTheme}" 
    46:       width="#{LayoutSkinBean.layoutScreenWidth}" 
    47:       sidebarWidth="0"> 
Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.IllegalStateException: Parent was not null, but this component not related 
    at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858) 
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) 
    at org.apache.jsp.pages.general.internalServerErrorPage_jsp._jspService(internalServerErrorPage_jsp.java:207) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) 

이 예외의 의미는 무엇이며 어떻게 해결할 수 있습니까?


업데이트 : 내 코드는 다음과 같습니다, 유효성 검증 세션 방법이

public HtmlForm getInitForm() { 
    validateSession(); 
    return initForm; 
} 

private void validateSession() {   
    HttpSession session = null; 
    try { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     actionPanelRendered = false; 
     if (facesContext != null) { 
      session = (HttpSession) facesContext.getExternalContext().getSession(false);    
      if (session != null) { 
       if (session.getAttribute(SessionAttributes.USER_LOGIN_NAME.getName()) != null) { 
        actionPanelRendered = true; 
       } 
      } 
     } 
    } catch(Exception e) { 
     logger.info("Exception arise in server error bean"); 
     e.printStackTrace(); 
    } 
} 
그것은 따라서 다음 줄에서오고

답변

5

:

<h:form id="internalServerErrorPageForm" binding="#{ServerErrorBean.initForm}"> 

몇 가지 알려지지 않은 이유로 양식을 bean에 바인딩했습니다. 이 예외는이 컴포넌트가 부모를 가지고 있지만 실제로는 이고, 실제로는이 JSP 페이지의 컴포넌트 트리만큼 부모가 아님을 나타냅니다. 이것이 사실이라면, 당신은이 줄을 제거해야합니다

form.setParent(someComponent); 

: 차례로 이것은 당신이 이전 또는 getInitForm() 방법의 통화 중 콩에 다음과 같은 일을하고 있다는 것을 나타냅니다.


업데이트 : 또 다른 가능한 원인은 당신이 JSF 구성 요소와 함께 HTML 주위에 <f:view>을 넣어 잊고있는 것입니다.


업데이트 2 : 또 하나의 원인은 하나와 같은 빈 속성에 여러 개의 물리적으로 다른 <h:form> 구성 요소를 결합하고 있다는 점이다. 그들은 각각 자신의 고유 한 속성에 묶여 있어야합니다 (또는이 특별한 경우에는 전혀 묶이지 말고 더 잘 수행 될 수 있습니다, 아래 참조). 이 문제에 관련없는


는 해당 validateSession 방법에 관해서는, 전체 방법의 관점에서 다음 번의 EL 식으로 단순화 될 수있다 :

rendered="#{not empty user.name}" 

SessionAttributes.USER_LOGIN_NAMEuser 같다고 가정.

+0

안녕 Baluc, 귀하의 빠르고 멋진 답장을 보내 주셔서 감사합니다. 내 getInitformvalidate 세션, 아래 코드를 추가했습니다 –

+0

대답 업데이트 참조하십시오. – BalusC

+0

Hi BalusC, 업데이트 해 주셔서 감사합니다. 이미 양식에 f : view 태그를 추가했습니다. 다른 이유가 있습니까? –

관련 문제