You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Apache Wiki <wi...@apache.org> on 2006/06/08 10:55:34 UTC
[Tapestry Wiki] Update of "InjectPropertyIntoASO" by ShingHingMan
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.
The following page has been changed by ShingHingMan:
http://wiki.apache.org/tapestry/InjectPropertyIntoASO
New page:
''' How to inject a property into an Application State Object (ASO) ? '''
In order to inject properties into an ASO, we implement a custom State``Object``Factory and define the method State``Object``Factory.create to create the ASO with the desired injected properties. We then use the above custom State``Object``Factory to create our ASO. The following example illustrates the above in detail. Suppose we have an ASO My``ASO with property messageHolder. We would like to create an My``ASO with the property messageHolder being injected by Hive``Mind.
{{{
package man.aso;
public class MyASO {
private IMessageHolder messageHolder;
public IMessageHolder getMessageHolder() {
return messageHolder;
}
public void setMessageHolder(IMessageHolder message) {
this.messageHolder = message;
}
}
}}}
{{{
package man.aso;
public interface IMessageHolder {
public String getMessage();
}
}}}
{{{
package man.aso;
public class HelloMessageHolder implements IMessageHolder{
public String getMessage() {
return "HelloMessage : Hello ";
}
}
}}}
We shall inject Hell``oMessage``Holder into My``ASO. We now implement a custom State``Object``Factory called My``ASO``Factory.
{{{
package man.aso;
import org.apache.tapestry.engine.state.StateObjectFactory;
public class MyASOFactory implements StateObjectFactory{
// To be injected by HiveMind
private IMessageHolder messageHolder;
// Contruct an MyASO with injected messageHolder
public Object createStateObject() {
MyASO myASO = new MyASO();
myASO.setMessageHolder(getMessageHolder());
return myASO;
}
public IMessageHolder getMessageHolder() {
return messageHolder;
}
public void setMessageHolder(IMessageHolder message) {
this.messageHolder = message;
}
}
}}}
Note that the property My``ASO``Factory.messageHolder will be injected by Hive``Mind. The following configuration in Hive``Mind module descriptor hivemodule.xml does all the wiring.
{{{
hivemodule.xml
<service-point id="helloMessage" interface="man.aso.IMessageHolder">
<invoke-factory>
<construct class="man.aso.HelloMessageHolder"/>
</invoke-factory>
</service-point>
<!-- This service creates an StateObjectFactory to create a MyASO.
The property MyASO.messageHolder will be injected from service
point helloMessage.
-->
<service-point id="myASOFactory" interface="man.aso.MyASOFactory">
<invoke-factory>
<construct class="man.aso.MyASOFactory">
<set-service property="messageHolder" service-id="helloMessage"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="myASO" scope="session">
<invoke-factory object="service:myASOFactory" />
</state-object>
</contribution>
}}}
The above will result in an ASO my``ASO being created with property messageHolder set to Hello``Message``Holder.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org