Navigation from treeTable fails if rootNodeRendered="false" -----------------------------------------------------------
Key: TRINIDAD-1055 URL: https://issues.apache.org/jira/browse/TRINIDAD-1055 Project: MyFaces Trinidad Issue Type: Bug Affects Versions: 1.0.7-core Environment: Observed with Windows XP, IE6 or Firefox 2.0.0.14, Apache MyFaces Core 1.1.5 and Trinidad 1.0.7. Reporter: Dirk Krummacker I have a simple JSP page with only a commandButton and a treeTable. The commandButton is wired to an action listener method that populates a list with nodes and places it into page flow scope. This node list serves as the treeTable's model. There is a column in the treeTable displaying a commandLink, clicking on this link causes an action that is navigating to a second page. The backing bean is in request scope. When I use the default rootNodeRendered="true", this page works as expected: First the treeTable is empty. Clicking the button fills it, and now I can open and close all nodes. If I click on a commandLink in the treeTable, I am taken to the correct page. Everything is fine. However if I now set the treeTable's attribute rootNodeRendered="false" (and change nothing otherwise), the commandLink navigation stops working. I still can open/close nodes, but any click on a commandLink just causes the page to refresh. What is more, if I now click on "Expand all", the commandLinks suddenly start working again, just as if this "Expand All" click "repaired" the treetable. Also, if I specify initiallyExpanded="true" in the JSP it works even if the root node is hidden. There is no change in behavior if the action method is specified on the bean instead of the row object. ----- treeTable.jsp ----- <%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%> <%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%> <f:view> <trh:html> <trh:head title="TreeTable" /> <trh:body> <tr:form> <tr:commandButton text="Populate" actionListener="#{treeTableBean.actionListener}" /> <tr:treeTable value="#{treeTableBean.treeModel}" var="node" rootNodeRendered="false"> <f:facet name="nodeStamp"> <tr:column sortable="true"> <f:facet name="header"> <tr:outputText value="Name" /> </f:facet> <tr:commandLink text="#{node.name}" action="#{node.navigate}" /> </tr:column> </f:facet> </tr:treeTable> </tr:form> </trh:body> </trh:html> </f:view> ----- TreeTableBean.java ----- public class TreeTableBean { public TreeModel getTreeModel() { RequestContext requestContext = RequestContext.getCurrentInstance(); Map<String, Object> pageFlowScope = requestContext.getPageFlowScope(); List<Node> contents = (List<Node>) pageFlowScope.get("contents"); if (contents == null) { contents = Collections.emptyList(); pageFlowScope.put("contents", contents); } return new ChildPropertyTreeModel(contents, "children"); } public void actionListener(ActionEvent event) { List<Node> noChildren = Collections.emptyList(); List<Node> childrenOfRoot = new ArrayList<Node>(); List<Node> childrenOfA = new ArrayList<Node>(); childrenOfA.add(new Node("aa", noChildren)); childrenOfA.add(new Node("ab", noChildren)); childrenOfA.add(new Node("ac", noChildren)); childrenOfRoot.add(new Node("a", childrenOfA)); List<Node> childrenOfB = new ArrayList<Node>(); childrenOfB.add(new Node("ba", noChildren)); childrenOfB.add(new Node("bb", noChildren)); childrenOfB.add(new Node("bc", noChildren)); childrenOfRoot.add(new Node("b", childrenOfB)); Node root = new Node("root", childrenOfRoot); List<Node> contents = new ArrayList<Node>(); contents.add(root); RequestContext requestContext = RequestContext.getCurrentInstance(); Map<String, Object> pageFlowScope = requestContext.getPageFlowScope(); pageFlowScope.put("contents", contents); } public static class Node implements Serializable { private static final long serialVersionUID = 1L; private String name; private List<Node> children; public Node(String name, List<Node> children) { this.name = name; this.children = children; } public String getName() { return name; } public List<Node> getChildren() { return children; } public String navigate() { return "target"; } } } ----- faces-config.xml ----- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <application> <default-render-kit-id>org.apache.myfaces.trinidad.core</default-render-kit-id> </application> <managed-bean> <managed-bean-name>treeTableBean</managed-bean-name> <managed-bean-class>TreeTableBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <navigation-rule> <display-name>treeTable</display-name> <from-view-id>/treeTable.jsp</from-view-id> <navigation-case> <from-outcome>target</from-outcome> <to-view-id>/target.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config> ----- end ----- -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.