You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by Böhringer Jochen <Jo...@tcc-products.de> on 2006/11/08 17:41:23 UTC
Define Trinidad navigation in faces-config.xml using action methods
instead of outcomes
Hello,
I have adapted the example from the Trinidad documentation (http://incubator.apache.org/adffaces/devguide/navigation.html) about Navigation to fit my needs, but I have one major problem. I want to use the approach to have the navigation hierarchy configured in the facelets-config.xml as a tree of managed beans describing the label and action of the menu items. This way I can easily use components like <tr:breadCrumbs> to render the way the user walked down the navigation path.
This works pretty good if I specifiy an outcome in this configuration for every item like this snippets shows:
<managed-bean>
<managed-bean-name>mtn_kape_editKeyAccount</managed-bean-name>
<managed-bean-class>de.tccproducts.kn.jsf.model.MenuTreeNode</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>action</property-name>
<property-class>java.lang.String</property-class>
<value>showSearchKeyAccount</value>
</managed-property>
<managed-property>
<property-name>description</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>icon</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>label</property-name>
<property-class>java.lang.String</property-class>
<value>Edit Key Account</value>
</managed-property>
<managed-property>
<property-name>viewId</property-name>
<property-class>java.lang.String</property-class>
<value>/kape_editKeyAccount.xhtml</value>
</managed-property>
</managed-bean>
But I want to be able to use action methods instead of outcomes in the configuration, because I have to do initialization work before showing some of my screens.
<managed-property>
<property-name>action</property-name>
<property-class>java.lang.String</property-class>
<value>#{keyAccountProfileEditorController.showSearchKeyAccount}</value>
</managed-property>
But if I try to define a method binding in the action property of the managed bean I get this exception:
Caused by: javax.faces.FacesException: Property action references object in a scope with shorter lifetime than the target scope none
at org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(ManagedBeanBuilder.java:164)
The reason is clear. The managed bean keyAccountProfileEditorController is on session scope an the navigation is defined in scope none. But even if I switch all navigation items to the session scope I get exceptions because the engine tries to evaluate the expression as a bean property and not as a method binding. So the engine tries to find a method getShowSearchKeyAccount in my controller bean. Is there a workaround to realize what I want to do or do I have to rethink about my design.
Regards
Jochen