2011-01-05 32 views
8

Nếu tôi bấm nút thông điệp submit` lỗi được ném vào máy chủ logjava.lang.IllegalStateException tại com.sun.faces.context.FacesContextImpl.assertNotReleased

login.xhtml

<h:form> 
    <p:panel header="Login"> 

     <p:messages id="msgs" showDetail="true"/> 

     <h:panelGrid columns="2" columnClasses="column" cellpadding="5"> 

      <h:outputLabel for="user" value="Username" /> 
      <h:inputText id="user" value="#{login.username}" /> 

      <h:outputLabel for="pw" value="Passwort" /> 
      <h:inputSecret id="pw" redisplay="false" value="#{login.password}" /> 

     </h:panelGrid> 
     <p:commandButton value="Anmelden" action="#{login.login}" type="submit" update="msgs" /> 
    </p:panel> 
</h:form> 

Login.java

@ManagedBean 
@ViewScoped 
public class Login { 

    private FacesContext fCtx; 
    private String username; 
    private String password; 

    public Login() { 
     fCtx = FacesContext.getCurrentInstance(); 
    } 

     public String login(){ 
    //  HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(true); 
    //  String sessionId = session.getId(); 
      fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Info: ", getUsername()+", "+getPassword()+", ")); 

     return "start.xhtml"; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
    public String getUsername() { 
     return username; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    public String getPassword() { 
     return password; 
    } 
} 

Error Stack Trace

05.01.2011 15:24:00 com.sun.faces.application.ActionListenerImpl processAction 
SCHWERWIEGEND: java.lang.IllegalStateException 
javax.faces.el.EvaluationException: java.lang.IllegalStateException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.IllegalStateException 
    at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:635) 
    at com.sun.faces.context.FacesContextImpl.addMessage(FacesContextImpl.java:471) 
    at org.dhbw.stg.wwi2008c.mopro.ui.managedBeans.Login.login(Login.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
    ... 23 more 
05.01.2011 15:24:00 com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNUNG: #{login.login}: java.lang.IllegalStateException 
javax.faces.FacesException: #{login.login}: java.lang.IllegalStateException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
    ... 22 more 
Caused by: java.lang.IllegalStateException 
    at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:635) 
    at com.sun.faces.context.FacesContextImpl.addMessage(FacesContextImpl.java:471) 
    at org.dhbw.stg.wwi2008c.mopro.ui.managedBeans.Login.login(Login.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
    ... 23 more 
javax.faces.FacesException: #{login.login}: java.lang.IllegalStateException 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:85) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: javax.faces.FacesException: #{login.login}: java.lang.IllegalStateException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:114) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:311) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) 
    ... 18 more 
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) 
    ... 22 more 
Caused by: java.lang.IllegalStateException 
    at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:635) 
    at com.sun.faces.context.FacesContextImpl.addMessage(FacesContextImpl.java:471) 
    at org.dhbw.stg.wwi2008c.mopro.ui.managedBeans.Login.login(Login.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) 
    ... 23 more 

Tôi có thể khắc phục sự cố bằng cách nào?

Trả lời

27

sai lầm của bạn là ở đây:

@ManagedBean 
@ViewScoped 
public class Login { 

    private FacesContext fCtx; 

    public Login() { 
     fCtx = FacesContext.getCurrentInstance(); 
    } 
} 

Bạn nên bao giờ gán FacesContext như dụ biến của một cái nhìn/phiên/ứng dụng scoped quản lý đậu và tái sử dụng nó trong các yêu cầu khác nhau, vì dụ hiện tại của FacesContext được gắn với yêu cầu hiện tại mà làm cho nó vốn có yêu cầu scoped (nhưng tốt nhất là không nên trong yêu cầu hạt tạp vì phong cách nghèo mà có thể gây nhầm lẫn cho người mới bắt đầu).

Phiên bản FacesContext được phát hành vào cuối yêu cầu. Trong các yêu cầu tiếp theo, cá thể thu được trong yêu cầu trước đó không hợp lệ nữa. Nếu nó đã làm việc, thì tất cả các phương thức getter trên ExternalContext sẽ trả về cho bạn các thuộc tính (tham số, cookie, tiêu đề, vv) của một yêu cầu HTTP trước đó và tất cả các phương thức setter được đặt thành một phản hồi HTTP trước đó đã được cam kết lâu. Điều này tất cả chỉ là không đúng.

Bạn nên luôn tải nó trên cơ sở từng địa phương (tức là ngay bên trong khối phương pháp). Trong trường hợp cụ thể của bạn, chỉ cần lấy nó ngay bên trong phương thức login():

public String login() { 
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info: ", getUsername() + ", " + getPassword() + ", ")); 
    return "start.xhtml"; 
} 
+0

Cảm ơn một lần nữa ... Một bước nhỏ cho hôm nay :-) – Sven

Các vấn đề liên quan