1 Reply Latest reply on Feb 17, 2015 4:06 AM by daniel.gentes

    <rich:tree> Example reRender not working Richfaces 3.3.4 final

    daniel.gentes

      Hey Community,

       

      i'm using Richfaces 3.3.4 final with JSF 1.2 on a SAP NetWeaver AS 7.31.

      Now im facing some Issues with dynamically showing selected Nodes from a rich:tree in a h:outputText. The selectedNodeListener is invoked correctly and the Name of the Node is saved in a String, but my h:outputText only refreshes on Page Refresh and not on Selection like in the Example from the Showcases(http://showcase-rf3.richfaces.org/richfaces/tree.jsf?tab=model&cid=26981).

      Does anyone know if this is a common Issue with the above Setup or am I just missing something? As far as I know SAP NetWeaver isnt in the List of supported Servers but its JEE5 compliant. Could this be the Reason?

       

      I simplified the the Example from the Richfaces Showcases to reproduce the Problem in a small Environment. Here is some Code:

       

      SimpleTreeBean.java

      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.List;
      import java.util.Map;
      
      import org.richfaces.component.html.HtmlTree;
      import org.richfaces.event.NodeSelectedEvent;
      import org.richfaces.model.TreeNode;
      import org.richfaces.model.TreeNodeImpl;
      
      public class SimpleTreeBean {
          private TreeNode rootNode = null;
          private List<String> selectedNodeChildren = new ArrayList<String>();
      
          private String nodeTitle;
      
      
          private void loadTree() {
                  rootNode = new TreeNodeImpl();
                  TreeNodeImpl rt = new TreeNodeImpl();
                  rt.setData("Root");
                  rootNode.addChild(1, rt);
                  for(int i = 1; i <= 5; i++){
                      TreeNodeImpl child = new TreeNodeImpl();
                      child.setData("Child "+i);
                      rt.addChild(i, child);
                  }
          }
      
          public void processSelection(NodeSelectedEvent event) {
              HtmlTree tree = (HtmlTree) event.getComponent();
              nodeTitle = (String) tree.getRowData();
              selectedNodeChildren.clear();
              TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey());
              if (currentNode.isLeaf()) {
                  selectedNodeChildren.add((String) currentNode.getData());
              } else {
                  Iterator<Map.Entry<Object, TreeNode>> it = currentNode
                          .getChildren();
                  while (it != null && it.hasNext()) {
                      Map.Entry<Object, TreeNode> entry = it.next();
                      selectedNodeChildren.add(entry.getValue().getData().toString());
                  }
              }
          }
      
          public TreeNode getTreeNode() {
              if (rootNode == null) {
                  loadTree();
              }
      
              return rootNode;
          }
      
          public String getNodeTitle() {
              return nodeTitle;
          }
      
          public void setNodeTitle(String nodeTitle) {
              this.nodeTitle = nodeTitle;
          }
      }
      
      
      
      
      
      
      
      
      
      
      
      
      

       

      test.jsp:

      <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
      <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
      <%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
      <%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
      
      <html>
      <head>
      <title>TestTree</title>
      </head>
      <body>
      <f:view>
       <h:form>    
              <h:panelGrid columns="2" width="100%" columnClasses="col1,col2">
              
                  <rich:tree style="width:300px" nodeSelectListener="#{simpleTreeBean.processSelection}" 
                      reRender="selectedNode" ajaxSubmitSelection="true"  switchType="client"
                      value="#{simpleTreeBean.treeNode}" var="item" ajaxKeys="#{null}">
                  </rich:tree>
                  
                  <h:outputText escape="false" value="Selected Node: #{simpleTreeBean.nodeTitle}" id="selectedNode" />
              
              </h:panelGrid>
          </h:form>
      </f:view>
      </body>
      </html>
      

       

      Important Part of faces-config.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <faces-config
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
          version="1.2">
          <managed-bean>
              <managed-bean-name>simpleTreeBean</managed-bean-name>
              <managed-bean-class>
                  com.realcore.web.beans.SimpleTreeBean
              </managed-bean-class>
              <managed-bean-scope>session</managed-bean-scope>
          </managed-bean>
      
      </faces-config>
      <</faces-config>/faces-config>
      

       

      Additionally there are some Validators and Converters in my faces-config too. But I think this isnt important for this Problem.

       

      And here is the web.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          id="WebApp_ID" version="2.5">
          <display-name>SstSapWEB</display-name>
          <welcome-file-list>
              <welcome-file>index.html</welcome-file>
              <welcome-file>index.htm</welcome-file>
              <welcome-file>index.jsp</welcome-file>
              <welcome-file>login.jsp</welcome-file>
              <welcome-file>default.html</welcome-file>
              <welcome-file>default.htm</welcome-file>
              <welcome-file>default.jsp</welcome-file>
          </welcome-file-list>
      
          <!-- Making the RichFaces skin spread to standard HTML controls -->
          <context-param>
              <param-name>org.richfaces.CONTROL_SKINNING</param-name>
              <param-value>enable</param-value>
          </context-param>
          <!-- Defining and mapping the RichFaces filter -->
          <filter>
              <display-name>RichFaces Filter</display-name>
              <filter-name>richfaces</filter-name>
              <filter-class>org.ajax4jsf.Filter</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>richfaces</filter-name>
              <servlet-name>Faces Servlet</servlet-name>
              <dispatcher>REQUEST</dispatcher>
              <dispatcher>FORWARD</dispatcher>
              <dispatcher>INCLUDE</dispatcher>
          </filter-mapping>
      
          <servlet>
              <servlet-name>Faces Servlet</servlet-name>
              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>Faces Servlet</servlet-name>
              <url-pattern>/faces/*</url-pattern>
          </servlet-mapping>
      </web-app>
      
      
      
      

       

      This simple Example isnt working too.

      I don't know how to fix or workaround this Issue. Any help is greatly appreciated.

       

      Regards,

      Daniel