Using Window Scope

You are viewing an old version (v. 2) of this page.
The latest version is v. 13, last edited on Dec 10, 2010 (view differences | )
<< View previous version | view page history | view next version >>

Using Window Scope Tutorial

Window Scope is a custom scope added by ICEfaces 2.0 to JSF 2. The purpose of this scope is to fill the niche between ViewScoped and SessionScoped by providing a slightly longer object lifespan than ViewScoped, but without the overhead of SessionScoped.

This tutorial assumes the reader has an understanding of JSF and ICEfaces and creating and working with projects related to those technologies. The focus is not to teach those basics, but instead to learn more about Window Scope.

The goal of this tutorial is to create a basic ICEfaces 2.0 project and examine the differences between View, Window, and Session scoped beans. The example will contain two basic pages that are navigated between, and some output information about our various scopes so we can see when a bean is created and destroyed.



Development Tools Used

The following tools were used to create the project.

1. Make the windowScope Project

  • Using Eclipse create a new Dynamic Web Project called windowScope
    • Target runtime: Apache Tomcat v7.0
    • Dynamic web module version: 3.0
    • Configuration: JavaServer Faces v2.0 Project (Mojarra)

2. Add ICEfaces

Add the icefaces.jar to your project from the ICEfaces 2 bundle. This can be added to the project through a custom User Library or by putting it into windowScope/WEB-INF/lib/. The approach doesn't matter as long as the jar is included in the deployed war file.

3. Create 3 Beans with Different Scopes

We will now create a Window Scope, ViewScoped, and SessionScoped bean. Aside from the naming and scope annotation these beans are exactly the same. Each will track a Timestamp value of when they were created. This will help us determine when a bean was re-created as part of the JSF lifecycle.

3a. Create WindowBean.java

Create a new Java class file called WindowBean in the package org.icefaces.tutorial.windowscope.beans and paste the code below:

WindowBean.java
package org.icefaces.tutorial.windowscope.beans;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.faces.bean.CustomScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean(name="windowBean")
@CustomScoped(value = "#{window}")
public class WindowBean implements Serializable {
	private Timestamp created;
	
	public WindowBean() {
		created = new Timestamp(System.currentTimeMillis());
	}

	public Timestamp getCreated() {
		return created;
	}

	public void setCreated(Timestamp created) {
		this.created = created;
	}
}

The custom ICEfaces 2 Window Scope is used by this class. As the scope is custom, the JSF annotation javax.faces.bean.CustomScoped is used, with a value of #{window. This will declare the bean as Window Scope.

3b. Create ViewBean.java

Create a new Java class file called ViewBean in the package org.icefaces.tutorial.windowscope.beans and paste the code below:

ViewBean.java
package org.icefaces.tutorial.windowscope.beans;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name="viewBean")
@ViewScoped
public class ViewBean implements Serializable {
	private Timestamp created;
	
	public ViewBean() {
		created = new Timestamp(System.currentTimeMillis());
	}

	public Timestamp getCreated() {
		return created;
	}

	public void setCreated(Timestamp created) {
		this.created = created;
	}
}

3c. Create SessionBean.java

Create a new Java class file called SessionBean in the package org.icefaces.tutorial.windowscope.beans and paste the code below:

SessionBean.java
package org.icefaces.tutorial.windowscope.beans;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="sessionBean")
@SessionScoped
public class SessionBean implements Serializable {
	private Timestamp created;
	
	public SessionBean() {
		created = new Timestamp(System.currentTimeMillis());
	}

	public Timestamp getCreated() {
		return created;
	}

	public void setCreated(Timestamp created) {
		this.created = created;
	}
}

4. Create PageController.java

Create a new Java class file called PageController in the package org.icefaces.tutorial.windowscope.controller and paste the code below:

PageController.java
package org.icefaces.tutorial.windowscope.controller;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

@ManagedBean(name="pageController")
@SessionScoped
public class PageController implements Serializable {
	public String navigatePage1() {
		System.out.println("Redirect to Page 1");
		
		return "page1";
	}
	
	public String navigatePage2() {
		System.out.println("Redirect to Page 2");
		
		return "page2";
	}
	
	public String action() {
		System.out.println("Action Fired");
		
		return null;
	}
	
	public void actionListener(ActionEvent event) {
		System.out.println("ActionListener Fired");
	}
}

This is a basic page backing bean that allows our tutorial application to simulate a few common use cases. The class provides two methods for navigation (between our two basic pages, which will be created next). The class also has a basic action and actionListener. By triggering each of these methods we will be able to see how Window Scope responds in comparison to ViewScoped and SessionScoped.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

© Copyright 2017 ICEsoft Technologies Canada Corp.