Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Wiki Markup
{rate:title=Rating|theme=dynamic}

Overview

The Scope plugin

Excerpt

implements JBoss Seam-style scoped bijection and conversation management

. It allows a user to declaratively define action properties that should be injected via the session before an action executes or properties that should be pushed out to the session after an action executes. It also allows conversations to be defined so that session-scoped variables can be managed better.

Features

  • An @In annotation that marks action properties that should be injected from the session before an action executes
  • An @Out annotation that marks action properties that should be put back into the session after an action executes
  • An @Begin annotation that creates a new converstaion
  • An @End annotation that ends a conversation and cleans up any variables stored in that conversation

Requirements

  • Struts 2.x

Installation

See http://code.google.com/p/struts2plugin-maven-repo/ if you use maven.

For non-maven users, this plugin can be installed by copying the plugin jar into your application's /WEB-INF/lib directory.

Usage

The scope plugin allows declarative scope management of action properties. Action properties can be scoped to one of several predefined scope. The predefined scopes are:

  • REQUEST
  • FLASH
  • CONVERSATION
  • SESSION
  • COOKIE
  • APPLICATION
  • UNSPECIFIED

The scope management functionality is provided by an interceptor which needs to be added to your action's interceptor stack:

Code Block
  <interceptor name="bean-scope" class="com.googlecode.scopeplugin.ScopeInterceptor" />

Examples

The following example shows how a session managed bean can be automatically be moved from the session to an action property before the action executes and moved from the action to the session after the action executes.

Code Block
public class ExampleAction {
	@In (scope=ScopeType.SESSION)
	@Out (scope=ScopeType.SESSION)
	private ExampleBean exampleBean;
	...
}

The next example shows how a conversation can be created and destroyed. Currently only a single active conversation is supported. A conversation will automatically be created for variables defined as CONVERSATION scope.

Code Block
public class ExampleAction extends ActionSupport {
	@In (scope=ScopeType.CONVERSATION)
	@Out (scope=ScopeType.CONVERSATION)
	private ExampleBean exampleBean;
	...	
	@Begin
	public String startConversation() {
		exampleBean = new ExampleBean();
		return SUCCESS;
	}
	
	public String doStuffinConversation() {
		return SUCCESS;
	}
	
	@End
	public String endConversation() {
		return SUCCESS;
	}
	...
}

Future Features

  • Add support for nested conversations
  • Add support for named conversations
  • Add support for ConversationIdAware