У меня есть 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.
Вы пробовали ajaxSubmitSelection = "true" как атрибут rich: tree? Ах, и убедитесь, что богатые: дерево окружено формой. –
Спасибо. Я пробовал оба без успеха. Я немного экспериментирую и отчитываюсь. – volvox
'ajaxSubmitSelection =" true "' должен работать (он работает здесь) - проверьте свои журналы, почему это не так. – Bozho