You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by "Causevic, Dzenan" <dc...@navisite.com> on 2007/02/20 16:39:27 UTC

Single user session values retained across other user sessions

I set up the tree with certain categories on one page. By selecting any of those categories user is being sent to a another page where that category is being displayed.

Now in order to be able to do this, I set up actionListener on the first page that captures which category user has clicked on, and then stores it in a bean. The second page (where user is being sent after he made selection) is simply reading the category from that bean, and displaying it. Everything works just fine but the problem arises when the user leaves those pages and then comes back. This should be completely a new session (even if the browser itself is closed old session values are still there) and the values from any previous sessions should be reset, but they are not.

Even if the user closes the browser itself, and opens those pages in a new browser he will still have those categories automatically pre-selected. That is the problem. I want every time user leaves those pages, categories selected during that session to be reset, so that values from previous sessions dont show up anymore.

Below are actual code excerpts. I did not include how onet3Tree bean implements the tree itself since it works fine and it's completely irrelevant for this specific issue.

1. Page with categories implemented as tree (reffered above as a first page):
                      <h:panelGroup>
                          <tr:tree var="occupation" value="#{onet3Tree.model}" binding="#{onet3TreeBean.tree}">
                              <f:facet name="nodeStamp">
                                  <tr:panelGroupLayout>
                                      <tr:commandLink text="#{occupation.onet3Title}" disabled="#{occupation.onet3Category}" actionListener="#{onet3TreeListener.onet3ItemAction}" action="insert">
                                          <tr:attribute name="onet3Id" value="#{occupation.onet3Id}"/>
                                      </tr:commandLink>
                                  </tr:panelGroupLayout>
                              </f:facet>
                          </tr:tree>
                      </h:panelGroup>

2. Page where the selected category is then displayed (reffered above as a second page):
                      <h:panelGroup>
                          <h:outputText escape="false" rendered="#{onet3Bean.onet3Selected}" styleClass="labelText" value="#{onet3Bean.onet3Title}" />
                          <tr:commandLink rendered="#{onet3Bean.onet3Selected}" text="delete" actionListener="#{onet3TreeListener.onet3ItemRemove}" action="refresh">
                              <tr:attribute name="onet3Id" value="#{onet3Bean.onet3Id}" />
                          </tr:commandLink>                                                    
                      </h:panelGroup>      

3. Tree listener (captures category on which user clicked and stores it in bean):
import javax.faces.component.UIComponent;
import javax.faces.event.ActionEvent;

public class Onet3TreeListener {
    
    /** Creates a new instance of Onet3TreeListener */
    public Onet3TreeListener() {
    }
    
    public void onet3ItemAction(ActionEvent event)
    {
        UIComponent actionItem = event.getComponent();
        
        Onet3Bean treeNode = new Onet3Bean();
        String onet3Id = (String)actionItem.getAttributes().get("onet3Id");
        treeNode.setOnet3Id(onet3Id);
        String onet3Title = (String)actionItem.getAttributes().get("text");
        treeNode.setOnet3Title(onet3Title);        
    }
}

4. Bean (where the selected category is being stored for the access by the second page):
public class Onet3Bean {
    
    /** Creates a new instance of Onet3Bean */
    public Onet3Bean() {
    }

    private static String onet3Id;
    private static String onet3Title;
    private static boolean onet3Selected;

    public void setOnet3Id(String onet3Id) {
        this.onet3Id = onet3Id;
    }

    public String getOnet3Id() {
        return onet3Id;
    }
    
    public void setOnet3Title(String onet3Title) {
        this.onet3Title = onet3Title;
    }

    public String getOnet3Title() {
        return onet3Title;
    }
    
    public boolean isOnet3Selected() {
        if(onet3Id != null){
            onet3Selected = (boolean)true;
        } else {
            onet3Selected= (boolean)false;
        }
        return onet3Selected;
    }    
}

5. faces-managed-beans.xml:   
  <managed-bean>
      <managed-bean-name>onet3TreeListener</managed-bean-name>
      <managed-bean-class>com.navisite.view.beans.Onet3TreeListener</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>
  <managed-bean>
      <managed-bean-name>onet3Bean</managed-bean-name>
      <managed-bean-class>com.navisite.view.beans.Onet3Bean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>

This e-mail is the property of NaviSite, Inc. It is intended only
for the person or entity to which it is addressed and may contain
information that is privileged, confidential, or otherwise protected
from disclosure. Distribution or copying of this e-mail, or the
information contained herein, to anyone other than the intended
recipient is prohibited.

Re: Single user session values retained across other user sessions

Posted by Brian Smith <un...@gmail.com>.
Instead of storing your bean in the session, why not use Trinidad's
PageFlowScope,  You can store the object in it and clear the scope
explicitly as needed.

On 2/20/07, Causevic, Dzenan <dc...@navisite.com> wrote:
>
>
> I set up the tree with certain categories on one page. By selecting any of
> those categories user is being sent to a another page where that category is
> being displayed.
>
> Now in order to be able to do this, I set up actionListener on the first
> page that captures which category user has clicked on, and then stores it in
> a bean. The second page (where user is being sent after he made selection)
> is simply reading the category from that bean, and displaying it. Everything
> works just fine but the problem arises when the user leaves those pages and
> then comes back. This should be completely a new session (even if the
> browser itself is closed old session values are still there) and the values
> from any previous sessions should be reset, but they are not.
>
> Even if the user closes the browser itself, and opens those pages in a new
> browser he will still have those categories automatically pre-selected. That
> is the problem. I want every time user leaves those pages, categories
> selected during that session to be reset, so that values from previous
> sessions dont show up anymore.
>
> Below are actual code excerpts. I did not include how onet3Tree bean
> implements the tree itself since it works fine and it's completely
> irrelevant for this specific issue.
>
> 1. Page with categories implemented as tree (reffered above as a first
> page):
>                       <h:panelGroup>
>                           <tr:tree var="occupation" value="#{
> onet3Tree.model}" binding="#{onet3TreeBean.tree}">
>                               <f:facet name="nodeStamp">
>                                   <tr:panelGroupLayout>
>                                       <tr:commandLink text="#{
> occupation.onet3Title}" disabled="#{occupation.onet3Category}"
> actionListener="#{onet3TreeListener.onet3ItemAction}" action="insert">
>                                           <tr:attribute name="onet3Id"
> value="#{occupation.onet3Id}"/>
>                                       </tr:commandLink>
>                                   </tr:panelGroupLayout>
>                               </f:facet>
>                           </tr:tree>
>                       </h:panelGroup>
>
> 2. Page where the selected category is then displayed (reffered above as a
> second page):
>                       <h:panelGroup>
>                           <h:outputText escape="false" rendered="#{
> onet3Bean.onet3Selected}" styleClass="labelText" value="#{
> onet3Bean.onet3Title}" />
>                           <tr:commandLink rendered="#{
> onet3Bean.onet3Selected}" text="delete" actionListener="#{
> onet3TreeListener.onet3ItemRemove}" action="refresh">
>                               <tr:attribute name="onet3Id" value="#{
> onet3Bean.onet3Id}" />
>                           </tr:commandLink>
>                       </h:panelGroup>
>
> 3. Tree listener (captures category on which user clicked and stores it in
> bean):
> import javax.faces.component.UIComponent;
> import javax.faces.event.ActionEvent;
>
> public class Onet3TreeListener {
>
>     /** Creates a new instance of Onet3TreeListener */
>     public Onet3TreeListener() {
>     }
>
>     public void onet3ItemAction(ActionEvent event)
>     {
>         UIComponent actionItem = event.getComponent();
>
>         Onet3Bean treeNode = new Onet3Bean();
>         String onet3Id =
> (String)actionItem.getAttributes().get("onet3Id");
>         treeNode.setOnet3Id(onet3Id);
>         String onet3Title =
> (String)actionItem.getAttributes().get("text");
>         treeNode.setOnet3Title(onet3Title);
>     }
> }
>
> 4. Bean (where the selected category is being stored for the access by the
> second page):
> public class Onet3Bean {
>
>     /** Creates a new instance of Onet3Bean */
>     public Onet3Bean() {
>     }
>
>     private static String onet3Id;
>     private static String onet3Title;
>     private static boolean onet3Selected;
>
>     public void setOnet3Id(String onet3Id) {
>         this.onet3Id = onet3Id;
>     }
>
>     public String getOnet3Id() {
>         return onet3Id;
>     }
>
>     public void setOnet3Title(String onet3Title) {
>         this.onet3Title = onet3Title;
>     }
>
>     public String getOnet3Title() {
>         return onet3Title;
>     }
>
>     public boolean isOnet3Selected() {
>         if(onet3Id != null){
>             onet3Selected = (boolean)true;
>         } else {
>             onet3Selected= (boolean)false;
>         }
>         return onet3Selected;
>     }
> }
>
> 5. faces-managed-beans.xml:
>   <managed-bean>
>       <managed-bean-name>onet3TreeListener</managed-bean-name>
>       <managed-bean-class>com.navisite.view.beans.Onet3TreeListener
> </managed-bean-class>
>       <managed-bean-scope>session</managed-bean-scope>
>   </managed-bean>
>   <managed-bean>
>       <managed-bean-name>onet3Bean</managed-bean-name>
>       <managed-bean-class>com.navisite.view.beans.Onet3Bean
> </managed-bean-class>
>       <managed-bean-scope>session</managed-bean-scope>
>   </managed-bean>
>
> This e-mail is the property of NaviSite, Inc. It is intended only
> for the person or entity to which it is addressed and may contain
> information that is privileged, confidential, or otherwise protected
> from disclosure. Distribution or copying of this e-mail, or the
> information contained herein, to anyone other than the intended
> recipient is prohibited.
>