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

Name

WebWork2 Plugin

Publisher

Donald Brown

License

Open Source (ASL2)

Version

1.0-SNAPSHOT

Compatibility

Struts 2.0.9+

Homepage

WebWork2 Plugin

Download

SVN

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

Overview

Note

This plugin is only experimental and hasn't been released yet. It is not ready to be used in production applications.

The Struts 2 WebWork plugin

Excerpt

allows webwork actions and configuration to be used in Struts 2

. It includes the necessary wrappers and adapters to allow a WebWork 2-based application to run in Struts 2 with minimal code changes.

Features

  • Includes adapter classes and interfaces of classes including Action, and ActionSupport
  • Supports webwork.properties, xwork.properties and xwork.xml
  • Supports JSP, Freemarker, and Velocity WebWork 2 tags

Missing Features

  • Not all classes and interfaces from XWork and WebWork 2 are extended
  • Tags are simple wrappers around existing Struts 2 ones
  • WebWork features like the rich text editor, calendar, and continuations aren't supported
  • Extra features like JasperReports and Spring integration need the proper Struts 2 plugin

Usage

Setting up Dependencies

If using Maven 2, replace the WebWork 2 dependency with this plugin, so change:

Code Block
langxml
<dependency>
    <groupId>com.opensymphony</groupId>
    <artifactId>webwork</artifactId>
    <version>2.2.6</version>
</dependency>

to:

Code Block
langxml
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-webwork2-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

For other build systems, copy this plugin, Struts 2 jars, and any required plugin jars to your application's WEB-INF/lib directory.

Configuring Struts FilterDispatcher

The Struts FilterDispatch needs to be configured to read the webwork xwork configuration files. This can be done by adding init-params to the filter configuration:

Code Block
<filter>

    <filter-name>struts2</filter-name>

    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    <init-param>
        <param-name>config</param-name>
        <param-value>struts-default.xml,struts-plugin.xml,struts.xml,xwork.xml</param-value>
    </init-param>
    <init-param>
        <param-name>configProviders</param-name>
        <param-value>org.apache.struts2.webwork2.WebWorkConfigurationProvider</param-value>
    </init-param>
</filter>

Replace webwork taglib with struts taglib

The syntax of the struts tags are almost identical to the webwork tags. The webwork taglib can be replaced with the struts taglib. To do this, rename the struts-tags.tld from the struts core jar to webwork.tld and move this file into the WEB-INF directory of the war.

Update validators.xml

Struts requires a doctype if you have a validators.xml, add the following doctype:

Code Block
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

Also, make sure you update the built in validators with the new validator classnames. The default validators can be found in the xwork source code at /com/opensymphony/xwork2/validator/validators/default.xml.

Update Interceptors

This plugin does not support webwork-style interceptors, so all interceptors must use Struts 2 Interceptor and ActionInvocation. Usually this only requires updating the package for these two interfaces.

Update references to ActionContext

This plugin does not support webwork-style ActionContext, so all Actions that use the Action context must be updated. Again, this is usually only requires updating the package for ActionContext.

Update references to ActionMapperFactory

Previously, an ActionMapper would be retrieved via the following code:

Code Block
ActionMapper mapper = ActionMapperFactory.getMapper();

In Struts 2, the ActionMapper must be retreived via the internal Guice container:

Code Block
Dispatcher du = Dispatcher.getInstance();
Configuration config = du.getConfigurationManager().getConfiguration();
ActionMapper mapper = config.getContainer().getInstance(ActionMapper.class);

Resources