org.apache.cocoon.acting
public class: ServerPagesAction [javadoc |
source]
java.lang.Object
org.apache.avalon.framework.logger.AbstractLogEnabled
org.apache.cocoon.acting.AbstractAction
org.apache.cocoon.acting.AbstractConfigurableAction
org.apache.cocoon.acting.ConfigurableComposerAction
org.apache.cocoon.acting.ServerPagesAction
All Implemented Interfaces:
org.apache.avalon.framework.activity.Disposable, org.apache.avalon.framework.thread.ThreadSafe, org.apache.avalon.framework.component.Composable, org.apache.avalon.framework.configuration.Configurable, Action
Allows actions to be written in XSP. This allows to use XSP to produce
XML fragments that are later reused in generators.
This action works in concert with the "action" logicheet, that offers
actions-related services such as redirect or result map access, and the
"capture" logicsheet that allows to capture parts of XSP-generated XML
either as an
XMLizable containing serialized SAX events,
or as a DOM
Node.
As for generators, the XSP file name is set using the "src" attribute.
This action accepts a single parameter, "output-attribute", which names
the request attribute where the XSP-generated document will be stored
(as an
XMLizable). If this parameter is omitted, the
XSP result is discarded (often the case when inner fragments are captured
with the "capture" logicsheet").
When "output-attribute" is set, the action status defaults to "success",
meaning child sitemap statements are executed. This allows to use an
existing XSP without modification with this action.
When "output-attribute" isn't set, the action status defaults to "failure".
The XSP must then use the "action" logicsheet to set its status.
Example :
<action type="serverpages" src="myAction.xsp">
<map:param name="output-attribute" value="xsp-action-result"/>
...
</action>
- author:
< - a href="mailto:sylvain@apache.org">Sylvain Wallez
- version:
CVS - $Id: ServerPagesAction.java 433543 2006-08-22 06:22:54Z crossley $
| Field Summary |
|---|
| public static final String | REDIRECTOR_OBJECT | |
| public static final String | ACTION_RESULT_OBJECT | |
| public static final String | ACTION_SUCCESS_OBJECT | |
| ComponentHandler | generatorHandler | |
| Methods from org.apache.cocoon.acting.ConfigurableComposerAction: |
|---|
|
compose |
| Methods from org.apache.cocoon.acting.AbstractConfigurableAction: |
|---|
|
configure |
| Method from org.apache.cocoon.acting.ServerPagesAction Detail: |
public Map act(Redirector redirector,
SourceResolver resolver,
Map objectModel,
String source,
Parameters parameters) throws Exception {
if (this.getLogger().isDebugEnabled()) {
getLogger().debug("serverpage source: " + source);
}
String outputKey = parameters.getParameter("output-attribute", null);
Map resultMap = new HashMap();
Object success = null;
// Get a ServerPagesGenerator
ServerPagesGenerator generator = (ServerPagesGenerator)this.generatorHandler.get();
// Generator output, if output-attribute was given
XMLByteStreamCompiler compiler = null;
try {
generator.enableLogging(getLogger());
generator.compose(this.manager);
generator.setup(resolver, objectModel, source, parameters);
// Setup generator output
if (outputKey == null) {
// discard output to a "black hole"
generator.setConsumer(new AbstractXMLConsumer() { } ); // Make the abstract class instanciable
} else {
// store output in a byte stream
compiler = new XMLByteStreamCompiler();
generator.setConsumer(compiler);
}
// Augment the object model for the "action" logicsheet
objectModel.put(REDIRECTOR_OBJECT, redirector);
objectModel.put(ACTION_RESULT_OBJECT, resultMap);
// Let the XSP do it's stuff
generator.generate();
success = objectModel.get(ACTION_SUCCESS_OBJECT);
} finally {
// Release generator
generatorHandler.put(generator);
// Clean up object model
objectModel.remove(REDIRECTOR_OBJECT);
objectModel.remove(ACTION_RESULT_OBJECT);
objectModel.remove(ACTION_SUCCESS_OBJECT);
}
if (outputKey != null) {
// Success defaults to true when the whole output is captured
if (success == null) {
success = Boolean.TRUE;
}
if (success == Boolean.TRUE) {
// Store the XSP output in the request
Request req = ObjectModelHelper.getRequest(objectModel);
req.setAttribute(outputKey, new XMLByteStreamFragment(compiler.getSAXFragment()));
}
}
return (success == Boolean.TRUE) ? resultMap : null;
}
|
public void configure(Configuration conf) throws ConfigurationException {
try {
this.generatorHandler = ComponentHandler.getComponentHandler(
ServerPagesGenerator.class,
conf,
this.manager,
null, // Context
null, // RoleManager
null, // LogkitLoggerManager
null, // InstrumentManager
"N/A" // instrumentableName
);
this.generatorHandler.enableLogging(getLogger());
this.generatorHandler.initialize();
} catch(Exception e) {
throw new ConfigurationException("Cannot set up component handler", e);
}
}
|
public void dispose() {
if (this.generatorHandler != null) {
this.generatorHandler.dispose();
this.generatorHandler = null;
}
}
|