Instead of cocoon.getComponent() you have to use manager.lookup(). Look at ServiceManager [1] for the details. It's available in your JavaScript as you can see in ScriptAction's code.

Joerg

[1] http://excalibur.apache.org/apidocs/org/apache/avalon/framework/service/ServiceManager.html

On 10.10.2007 7:44 Uhr, Josh2007 wrote:
Thanks for the information,

I took a look at ScriptAction's source code.
I have a better understanding of how it works but it seems I need to import
in my scriptAction other components and functions (DOMParser,
session.setAttribute...).

Actually I'm trying to adapt my flowscript code to a scriptAction as I need
to stay in the same sitemap after the execution of the javascript.

Here's the flowscript I'm trying to adapt.

// loadDocument() reads in an XML file and returns a DOM Document. function loadDocument(uri) {
var parser = null;
var source = null;
var resolver = null;
try {
parser =
cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
resolver =
cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
source = resolver.resolveURI(uri);
var is = new Packages.org.xml.sax.InputSource(source.getInputStream());
is.setSystemId(source.getURI());
return parser.parseDocument(is);
} finally {
if (source != null) resolver.release(source);
if (parser != null) cocoon.releaseComponent(parser);
if (resolver != null) cocoon.releaseComponent(resolver);
}
}

// ------------------------- getStreamToSession
-------------------------------------------

// retrieve the XML
var stream = loadDocument("cocoon:/stream");

// save stream in session
var session = cocoon.session;
session.setAttribute("stream", stream);

//
---------------------------------------------------------------------------------------------

Of course, getComponent to load java components is undefined as I don't have
access to the class, the same with the parser.

I noticed that getComponent is part of org.apache.components.flow and
therefore not accessible from scriptAction.

I should be able to import java comonents with BSF.
Do you have any idea how to do it?

Thanks,

Josh


Joerg Heinicke wrote:
On 09.10.2007 17:13 Uhr, Josh2007 wrote:

I need to access cocoon object from a javascript scriptAction to make use
of
session, request... functions.
The ScriptAction works more like a usual Cocoon Java component than like flowscript. Therefore you have the ObjectModel available which is actually only a Map. To access the stuff you need you use the ObjectModelHelper and call the corresponding static methods like getRequest() or getSession() [1]. If you have a look into ScriptAction's source code (which is simple) you will see the other objects it registers for usage in the JavaScript:

mgr.registerBean("resolver", resolver);
mgr.registerBean("objectModel", objectModel);
mgr.registerBean("parameters", par);

// ScriptAction housekeeping
mgr.registerBean("actionMap", actionMap);

// helpers
mgr.registerBean("logger", getLogger());
mgr.registerBean("request", ObjectModelHelper.getRequest(objectModel) );
mgr.registerBean("scriptaction", this );
mgr.registerBean("manager", this.manager );


It seems the only way to access cocoon object is to create a flowscript.
Is there another solution as I don't want to redirect to another pipeline
after the script is performed unlike flowscript does?
The cocoon object is only a simplified version to access all the stuff in the ObjectModel. It's indeed only available in flow script.

Joerg

[1] http://cocoon.apache.org/2.1/apidocs/org/apache/cocoon/environment/ObjectModelHelper.html

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to