我有一个rich:tree
组件,如下所示:
<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());
}
}
}
但是当页面呈现树(精细)时,单击某个节点会突出显示该节点,但不会从任何Bean记录器调用中记录任何内容 - 该方法只是未被调用。任何帮助回答为什么会这样做将不胜感激。 标记
编辑添加了建议的标签/简化的bean方法 - 就日志而言,仍然无法从bean获得响应:
<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文件的选项卡中呈现。我的支持bean方法现在也是:
public void processLogSelection(NodeSelectedEvent event) {
logger.info("In processLogSelection");
}
进一步编辑
有趣的是,我以为我会回到基本的工作模式。我从RichFaces Demo Page获取了代码。我修改了faces-config.xml以包含SimpleTreeData
bean。我无法获取在(simple-tree-data.properties
)中读取数据文件的bean代码,因此我改为使用FileReader
。这个构建好了,我得到了一个修改过的index.jsp jsf页面,在示例页面上列出了简单的树例子,除了点击列表项没有将选定的nodeTitle
报告给指定的地方(同样的问题) )。
我可以将此视为上面报告的相同问题,或者loadTree
bean中的SimpleTreeData.java
方法已被更改的事实。在更改中,我删除了以下行并根据需要更改了无关代码:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
InputStream dataStream = externalContext.getResourceAsStream(DATA_PATH);
如前所述,我使用了FileReader
,但有人认为这个问题可能与我删除这3行有关吗?如上所列,我的processLogSelection
方法不使用getCurrentInstance
,但我不确定如果JSF中列出ajaxSubmitSelection="true"
则需要它。
难住了。
答案 0 :(得分:1)
我尝试this facelets template和此sample java backing bean并调用了该方法。我假设你使用Seam,但也许我错了:)不久之前有一些抱怨:seam forum。您使用的是什么版本的Richfaces以及哪些浏览器?如果你也使用Seam,请告诉它的版本。
答案 1 :(得分:0)
解决这个问题的方法是安装一个facelets jar。见here。不出所料,它影响了我的其他问题。