2010-02-24 4 views
1

У меня есть rich:tree компонент, используемый как так:RichFaces богат: дерево nodeSelectListener не прислушиваются

    <rich:tree switchType="client" value="#{MyBacking.logTree}" 
        reRender="selectedLog" var="item" nodeFace="#{item.type}" 
        nodeSelectListener="#{MyBacking.processLogSelection}" 
        style="width: 50px;"> 
        <rich:treeNode type="folder" 
         icon="/img/logListFolderIconClosed.png" 
         iconLeaf="/img/logListFolderIconOpen.png"> 
         <h:outputText value="#{item.name}" /> 
        </rich:treeNode> 
        <rich:treeNode type="log" iconLeaf="/img/logFileIcon.png" 
         icon="/img/logFileIcon.png"> 
         <h:outputText value="#{item.name}" /> 
        </rich:treeNode> 
       </rich:tree> 

и мой метод MyBacking processLogSelection() является:

public void processLogSelection(NodeSelectedEvent event) { 
    logger.info("In processLogSelection"); 
    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()); 
      logger.info("selected node: " + entry.getValue().getData().toString()); 
     } 
    } 
} 

Но когда страница Отрисовывает Дерево (тонкое) щелчок на узле выделяет узел, но ничего не записывается ни из одного из вызовов журнала журнала - метод просто не вызывается. Любая помощь в ответе на вопрос, почему это может быть очень признательна. Марк

EDIT Добавлено предложил теги/упрощенный метод боб - все еще не появляется, чтобы получить ответ от боба, насколько журналы идут:

  <h:panelGrid columns="2" border="0" width="100%" rowClasses="tt"> 
      <rich:panel styleClass="panelLogTree" header="Log Select"> 
       <h:form> 
        <rich:tree switchType="client" value="#{MyBacking.logTree}" 
         var="item" nodeFace="#{item.type}" reRender="selectedLog" 
         nodeSelectListener="#{MyBacking.processLogSelection}" 
         ajaxSubmitSelection="true" style="width: 50px;"> 
         <rich:treeNode type="folder" 
          icon="/img/logListFolderIconClosed.png" 
          iconLeaf="/img/logListFolderIconOpen.png"> 
          <h:outputText value="#{item.name}" /> 
         </rich:treeNode> 
         <rich:treeNode type="log" iconLeaf="/img/logFileIcon.png" 
          icon="/img/logFileIcon.png"> 
          <h:outputText value="#{item.name}" /> 
         </rich:treeNode> 
        </rich:tree> 
       </h:form> 
      </rich:panel> 

      <rich:panel styleClass="panelLogOutput" header="Log Content"> 
       <h:outputText escape="false" 
        value="Log content: #{MyBacking.nodeTitle}" id="selectedLog" /> 
      </rich:panel> 
     </h:panelGrid> 
    </rich:tab> 

Примечание конец rich:tab, как это дерево является оказание в вкладке, из включенного jsp-файла. Мой метод поддержки боба теперь также:

public void processLogSelection(NodeSelectedEvent event) { 
    logger.info("In processLogSelection"); 
} 

ДАЛЕЕ EDIT Интересно, я думал, что рипы обратно к основной рабочей модели. Я взял код из RichFaces Demo Page. Я изменил faces-config.xml, чтобы включить bean-компонент SimpleTreeData. Мне не удалось получить код компонента, который читает файл данных в (simple-tree-data.properties), поэтому вместо этого я использовал FileReader. Это построено нормально, и я получил измененную страницу index.jsp jsf, чтобы отобразить простой пример дерева, как на демонстрационной странице, за исключением того, что щелчок по элементу списка не сообщал выбранный nodeTitle в указанное место (та же проблема).

Я вижу это либо в той же самой проблеме, о которой сообщалось выше, либо в том, что метод loadTree в фасоне SimpleTreeData.java был изменен. В изменении, я удалил следующие строки и изменен посторонний код в зависимости от обстоятельств:

 FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = facesContext.getExternalContext(); 
    InputStream dataStream = externalContext.getResourceAsStream(DATA_PATH); 

Как уже упоминалось ранее, я использовал FileReader но кто-то думает, эта проблема может быть связана с меня устранить эти 3 строки? Как также указано выше, мой метод processLogSelection не использует getCurrentInstance, но я не уверен, что это необходимо, если в JSF указан ajaxSubmitSelection="true".

Stumped.

+1

Вы пробовали ajaxSubmitSelection = "true" как атрибут rich: tree? Ах, и убедитесь, что богатые: дерево окружено формой. –

+0

Спасибо. Я пробовал оба без успеха. Я немного экспериментирую и отчитываюсь. – volvox

+0

'ajaxSubmitSelection =" true "' должен работать (он работает здесь) - проверьте свои журналы, почему это не так. – Bozho

ответ

0

Исправить это было, чтобы установить торцовую банку. См. here. Это отразилось на моих других проблемах, неудивительно.

1

Я пробовал this facelets template и этот sample java backing bean и метод был вызван. Я предположил, что вы используете Seam, но, может быть, я ошибаюсь :) Некоторое время назад были некоторые жалобы: seam forum. Какую версию Richfaces вы используете и какой браузер? Если вы используете также Seam, сообщите его версию.

+0

Я не использую шов. Я использую RF3.3.2 SR1. Я читал жалобы Seam раньше, но поскольку я не использую Seam, это было ограниченным использованием. Я использую Firefox v3.5.8 для тестирования. – volvox

Смежные вопросы