Are there any examples available of using XMLMenuModel. The Trinidad demo apps use ProcessMenuModel and that, apparently, can be session scoped, so it doen't help me.
Glenn Silverman -----Original Message----- From: Zigc Junk [mailto:[EMAIL PROTECTED] Sent: Thursday, July 31, 2008 2:23 PM To: MyFaces Discussion Subject: Re: How can I create a session scoped Trinidad menu model Did u try to change from request to session? Since your bean is request scoped, every request will create a new instance of the bean, so does its property. regard Bill On Thu, Jul 31, 2008 at 4:05 PM, Silverman, Glenn <[EMAIL PROTECTED]> wrote: > I need a session-scoped menu model but the documentation says I can't, and > that creates a problem > whenever I click on a button to do something when I'm not on the first tab > of the menu. Here's my code... > I have a trinidad switcher control managed by a commandNavigationItem > control. > > <tr:navigationPane id="navPaneA" level="1" > value="#{root_menu}" var="foo"> > <f:facet name="nodeStamp"> > <tr:commandNavigationItem > id="navItemA" text="#{foo.label}" > action="#{foo.doAction}"/> > </f:facet> > </tr:navigationPane> > > <tr:switcher facetName="#{root_menu.navLabel}" > defaultFacet="Messages" > > <f:facet name="Messages"> > <tr:panelGroupLayout layout="vertical"> > <jsp:include > page="../editors/errormessages.jspx"/> > </tr:panelGroupLayout> > </f:facet> > <f:facet name="Help Text"> > <tr:panelGroupLayout layout="vertical"> > <jsp:include > page="../editors/help.jspx"/> > </tr:panelGroupLayout> > </f:facet> > <f:facet name="Buttons"> > <tr:panelGroupLayout layout="vertical"> > <jsp:include > page="../editors/buttons.jspx"/> > </tr:panelGroupLayout> > </f:facet> > <f:facet name="Sounds"> > <tr:panelGroupLayout layout="vertical"> > <jsp:include > page="../editors/sounds.jspx"/> > </tr:panelGroupLayout> > </f:facet> > </tr:switcher> > > And a menu model: > > <menu xmlns="http://myfaces.apache.org/trinidad/menu"> > <groupNode id="msgs" idref="message" label="Error Messages" > defaultFocustPath="true"> > <itemNode id="message" label="Messages" > action="goToMessages" > focusViewId="/index.jspx"/> > <itemNode id="help" label="Help Text" > action="goToHelp" > focusViewId="/index.jspx"/> > <itemNode id="button" label="Buttons" > action="goToButton" > focusViewId="/index.jspx"/> > <itemNode id="sound" label="Sounds" > action="goToSound" > focusViewId="/index.jspx"/> > </groupNode> > <groupNode id="allcodes" label="AllCodes" idref="cat"> > > <itemNode id="cat" label="Categories" > action="goToCategory" > focusViewId="/index.jspx" /> > <itemNode id="link" label="CodeLinks" > action="goToLink" > focusViewId="/index.jspx" /> > </groupNode> > </menu> > > which is defined in faces-config.xml as a managed bean: > > <managed-bean> > <managed-bean-name>root_menu</managed-bean-name> > <managed-bean-class>com.dylt.bean.MenuModelBean</managed-bean-class> > <managed-bean-scope>request</managed-bean-scope> > <managed-property> > <property-name>source</property-name> > <property-class>java.lang.String</property-class> > <value>/WEB-INF/menu-metadata.xml</value> > </managed-property> > </managed-bean> > > Here, MenuModelBean just extends XMLMenuModel as follows (This is > similar to the example in the Trinidad Developer Guide): > > public class MenuModelBean extends XMLMenuModel { > > public String getGroupLabel(){ > List list = getNodesFromFocusPath(false); > return (String)list.get(list.size()-1); > } > public String getNavLabel(){ > List list = getNodesFromFocusPath(true); > return (String)list.get(list.size()-1); > } > public List getNodesFromFocusPath(boolean itemsOnly){ > ArrayList focusPath = (ArrayList)this.getFocusRowKey(); > return getNodesFromFocusPath(focusPath, itemsOnly); > } > > public List getNodesFromFocusPath(ArrayList focusPath, boolean > itemsOnly){ > > > if (focusPath == null || focusPath.size() == 0) > return null; > > // Clone the focusPath cause we remove elements > ArrayList fp = (ArrayList) focusPath.clone(); > > // List of nodes to return > List nodeList = new ArrayList<Object>(); > > // Convert String rowkey to int and point to the > // node (row) corresponding to this index > int targetNodeIdx = (Integer)fp.get(0); > TreeModel tree = (TreeModel)this.getWrappedData(); > > tree.setRowIndex(targetNodeIdx); > > // Get the node > Object node = tree.getRowData(); > String label = null; > if(node instanceof ItemNode){ > label= ((ItemNode)node).getLabel(); > if(itemsOnly) > nodeList.add(label); > } > else if (node instanceof GroupNode){ > label= ((GroupNode)node).getLabel(); > if(!itemsOnly) > nodeList.add(label); > } > > > // Remove the 0th rowkey from the focus path > // leaving the remaining focus path > fp.remove(0); > > // traverse into children > if ( fp.size() > 0 > && tree.isContainer() > && !tree.isContainerEmpty() > ) > { > tree.enterContainer(); > > // get list of nodes in remaining focusPath > List childList = getNodesFromFocusPath(fp, itemsOnly); > > // Add this list to the nodeList > nodeList.addAll(childList); > > tree.exitContainer(); > } > > return nodeList; > } > ) > > Here's the problem: If I'm on one of the facet pages other than the first > one, clicking > on any command button or link always takes me back to the first facet. If I > use > partialSubmit and partialTriggers to try to limit page refresh to a > particular page > element, the behavior is even more bizarre. If I click on a tab to change > facets, the > first command button or link click works as expected, but any subsequent > clicks assume > I am on the first facet page and won't update the facet page I'm on at all. > > Here's an example page, the help.jspx in the second facet: > > jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" > xmlns:f="http://java.sun.com/jsf/core" > xmlns:tr="http://myfaces.apache.org/trinidad"> > <jsp:directive.page contentType="text/html;charset=utf-8" /> > <f:subview id="helpWrapperA"> > <tr:table id="helpTableA" var="hlp" > value="#{helpBean.list}" partialTriggers="helpEditLink"> > <tr:column headerText="Id"> > <tr:outputText value="#{hlp.helpId}" > /> > </tr:column> > <tr:column headerText="Message"> > <tr:commandLink id="helpEditLink" > text="#{hlp.text}" > immediate="true" > partialSubmit="true"> > <tr:setActionListener > from="#{hlp}" > > to="#{pageFlowScope.helpDetail}" /> > </tr:commandLink> > </tr:column> > </tr:table> > </f:subview> > <tr:separator/> > <tr:showDetail undisclosedText="Show Detail" disclosedText="Hide > Detail"> > <f:subview id="helpWrapperB"> > <tr:panelFormLayout rows="2" > > partialTriggers=":::helpWrapperA:helpTableA:helpEditLink"> > <tr:outputText value="ID:" /> > <tr:outputText value="Text:" /> > <tr:outputText > value="#{pageFlowScope.helpDetail.helpId}" /> > <tr:inputText > value="#{pageFlowScope.helpDetail.text}"/> > </tr:panelFormLayout> > </f:subview> > </tr:showDetail> > </jsp:root> > > Could this behavior be the result of the fact that the scope for the menu > model must be "request" ? If so, then every subsequent > > "request" will always go to, or assume I'm on, the default tab. How can I > change this? > > Glenn Silverman > >

