3 Stimmen

java.lang.IllegalStateException: Parent war nicht null, aber diese Komponente nicht verwandt

Ich habe die folgende Ausnahme zum Zeitpunkt der Ausführung von JSF-Programm.

    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)

Was ist die Bedeutung dieser Ausnahme und wie kann ich sie beheben?


Update : Mein Code ist unten,

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

Die Methode zur Validierung der Sitzung lautet

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();
    }
}

5voto

BalusC Punkte 1034465

Sie stammt also aus der folgenden Zeile:

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

Sie haben das Formular aus einem unbekannten Grund an die Bean gebunden. Die Ausnahme zeigt an, dass diese Komponente einen Elternteil hat, aber dass dieser eigentlich gemäß dem Komponentenbaum in der JSP-Seite überhaupt kein übergeordnetes Element. Dies wiederum deutet darauf hin, dass Sie in der Bean etwas wie das Folgende vor oder während des Aufrufs von getInitForm() Methode:

form.setParent(someComponent);

Wenn dies zutrifft, sollten Sie diese Zeile entfernen.


Update : Eine andere mögliche Ursache ist, dass Sie vergessen haben, eine <f:view> um das HTML mit den JSF-Komponenten.


Update 2: eine weitere Ursache ist, dass Sie mehrere und physisch unterschiedliche <h:form> Komponenten zu ein und derselben Bean-Eigenschaft. Sie sollten jeweils an ihre eigene Eigenschaft gebunden werden (oder in diesem speziellen Fall überhaupt nicht gebunden werden, das kann besser gemacht werden, siehe unten).


Unabhängig von dem Problem, das Sie angesprochen haben validateSession Methode kann die gesamte Methode auf den folgenden einzigen EL-Ausdruck in der Ansicht vereinfacht werden:

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

unter der Annahme, dass SessionAttributes.USER_LOGIN_NAME ist gleich user .

0 Stimmen

Hallo Baluc, Vielen Dank für Ihre schnelle und awesome reply.My getInitformvalidate die Sitzung, ich habe den Code unten hinzufügen,

0 Stimmen

Hallo BalusC,Danke für dein Update.ich habe bereits das f:view Tag im Formular hinzugefügt.gibt es einen anderen Grund dafür?

0 Stimmen

Nun, das wird noch merkwürdiger. Binden Sie physisch unterschiedliche Formen an ein und dieselbe Bohneneigenschaft?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X