3 Replies Latest reply on Feb 13, 2008 5:34 AM by Bibin B

    Strange IllegalStateException with RichFaces/Ajax4JSF

    Bibin B Newbie

      Hi,
      I am getting an IllegalStateException, which I have no clue, from my JSF/Richfaces implementation running on Tomcat 6.0.1

      javax.faces.FacesException: #{customerSearch.doSearch}: /pages/includes/customer-search.jspx @35,352 action="#{customerSearch.doSearch}": java.lang.IllegalStateException
       com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
       javax.faces.component.UICommand.broadcast(UICommand.java:383)
       org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:61)
       org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:184)
       org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:162)
       org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:350)
       com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
       com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
       com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
       javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
       org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
       org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
      
      
      java.lang.IllegalStateException
       com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:428)
       com.sun.faces.context.FacesContextImpl.addMessage(FacesContextImpl.java:347)
       com.qwest.ufeed.vision.presentation.beans.CustomerSearch.doSearch(CustomerSearch.java:71)
       sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       java.lang.reflect.Method.invoke(Method.java:585)
       org.apache.el.parser.AstValue.invoke(AstValue.java:131)
       org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
       com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
       com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69)
       com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
       javax.faces.component.UICommand.broadcast(UICommand.java:383)
       org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:61)
       org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:184)
       org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:162)
       org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:350)
       com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
       com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
       com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
       javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
       org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
       org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
      
      
      



      The doSearch method in my managed bean is given below
      public String doSearch(){
       results=new ArrayList<SelectItem>();
       if(keyword==null || keyword.trim().length()==0){
      
       }else{
       keyword=keyword.trim();
       if(keyword.equals(WILDCARD_KEYWORD)){
       results=convertListToSelect(getCustomerMgr().getCustomers());
       }else if(searchBy.equals(DEFAULT_SEARCH_CLAUSE)){
       results=convertListToSelect(findCustomerByPrefix(getCustomerMgr().getCustomers(),keyword.toLowerCase()));
       }else if(searchBy.equals(ID_SEARCH_CLAUSE)){
       Collections.sort(getCustomerMgr().getCustomers());
       int fndIdx=Collections.binarySearch(getCustomerMgr().getCustomers(), new Customer(keyword));
       if(fndIdx>=0){
       results=convertObjectToSelect(getCustomerMgr().getCustomers().get(fndIdx));
       }
       }
       }
       if(results.size()==0){
       visionContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Password updated successfully","Password updated successfully"));
       }
       return null;
       }
      


      I am getting this error when the results.size==0 condition becomes true.Whenever an error is raised from the bean handler method,it simply returns this error

      The form in the jsp page where I used to make this call is also given below

      <a4j:form id="searchForm">
       <rich:panel id="searchCustomer">
       <f:facet name="header"><h:outputText value="Search"/></f:facet>
       <table>
       <tr>
       <td>
       <h:selectOneRadio id="searchBy" value="#{customerSearch.searchBy}">
       <f:selectItem itemValue="ID" itemLabel="Account ID"/>
       <f:selectItem itemValue="NAME" itemLabel="Customer Name" />
       </h:selectOneRadio>
       </td>
       </tr>
       <tr>
       <td>
       <h:inputText label="Search key" required="true" id="key" value="#{customerSearch.keyword}">
       </h:inputText>
       <rich:spacer width="5px"/>
       <a4j:commandButton accesskey="S" oncomplete="document.getElementById('searchForm:doSearch').disabled=false;" onclick="this.disabled=true;" onmouseover="goLite(this.form.name,this.name)" onmouseout="goDim(this.form.name,this.name)" styleClass="visionBtn" id="doSearch" value="Search" reRender="custList" action="#{customerSearch.doSearch}"/>
       <rich:spacer width="2px"/>
       <h:graphicImage id="searchHLP" style="vertical-align:middle" value="/graphics/help-icon.gif">
       <rich:toolTip>
       <span style="white-space:nowrap">
       <strong>Tip:</strong>Type '*' to get all Customers.
       <br/>Use<strong> ALT + S </strong>to search
       </span>
       </rich:toolTip>
       </h:graphicImage>
       </td>
       </tr>
       </table>
       </rich:panel>
       </a4j:form>
      


      Please help me with this issue

        • 1. Re: Strange IllegalStateException with RichFaces/Ajax4JSF
          Ilya Shaikovsky Master

          you shoud getCurrentInstance every time before you need to add message instead of set instance once for the bean.

          • 2. Re: Strange IllegalStateException with RichFaces/Ajax4JSF
            Bibin B Newbie

            My managed bean extends a base bean class.This is the code from that class

             private ResourceBundle myBundle=null;
            
             protected static String NAV_HOME="home";
             protected FacesContext visionContext = null;
            
            
             public BaseBean() {
             visionContext=FacesContext.getCurrentInstance();
             myBundle=ResourceBundle.getBundle(DEFAULT_BUNDLE);
             }
             protected String readFromBundle(String key){
             return myBundle.getString(key);
             }
            


            I am using the same visionContext protected reference in managed bean class like
            visionContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Password updated successfully","Password updated successfully"));
            


            Is that not enough?I think you were talking about the same thing.Thanks for the reply.Kindly respond

            • 3. Re: Strange IllegalStateException with RichFaces/Ajax4JSF
              Bibin B Newbie

              Thanks dude..It worked. Actually I have put my bean in session.But I was in doubt when almost same code worked for some other beans,but those were in request and I was calling the currentInstance in the constructor of the base class.Any way thanks for the quick reply.