2 Replies Latest reply: May 1, 2012 4:25 PM by Rohit Kamboj RSS

    how to put lists in the session or application scope

    bart king Newbie

      I tried to use Session Scope on the component, on @Factory and also on @Out but nothing seems to work. I am populating a list from the database values and would like to have it available through out the application or session - to avoid multiple queries. But, every time I access this list in JSF page, a db call is made because list value is null.


      @Factory(value="list1",scope=ScopeType.SESSION)     
           public void getList1() {     
                list1 = return em.createQuery(queryStr).getResultList();           
           }



        • 1. Re: how to put lists in the session or application scope
          bart king Newbie

          Got it:



          @Out(scope=ScopeType.SESSION, required=false)
              List<SelectItem> list1;
          
          @Factory(value="list1")     
               public void getList1() {     
                    list1 = return em.createQuery(queryStr).getResultList();           
               }
          
          
                   
          <h:selectOneMenu value="#{val1}">
               <f:selectItem itemLabel="-- Select --" itemValue="#{null}"/>        
               <f:selectItems value="#{list1}"/>                     
          </h:selectOneMenu>
          
          





          • 2. Re: how to put lists in the session or application scope
            Rohit Kamboj Newbie

            I am facing an issue with any scope greater than EVENT.

            I had this

             

            @Factory(value="allDistinctDwellTypes", scope=ScopeType.EVENT)

            public List<DwellType> getDistinctDwellTypes(){

                      //code to get the list

            }

             

            On my UI I had this:

             

            <h:selectOneListbox id="dwellType" size="1" value="#{allDevelopmentsAction.developmentSearch.dwellType}" required="false">

                   <s:selectItems value="#{allDistinctDwellTypes}"

                        label="#{dwellType.description}" var="dwellType"  noSelectionLabel="Choose" />

                   <s:convertEntity />

            </h:selectOneListbox>

             

            With EVENT scope every thing works fine. However if I change the scope to say APPLICATION, then the list box is populated fine with the options but as and when I choose an option and submit the page, I get an error saying value is required. This does not occur with EVENT scope.

             

            I have also tried your suggestion by using @Factory method which returns void and then using @out and setting the scope of the variable as APPLICATION. But same thing happens.