p:在liferay门户中选择treeNode时未调用ajax侦听器

时间:2017-09-12 15:47:48

标签: ajax primefaces jsf-2 liferay-6

在基于JSF-Primefaces的liferay portlet(PrimeFaces 6.1)上,我在<p:tree>内选择元素时尝试执行自定义任务。为此,我根据PF文档所述的内容,在我的支持Bean上使用PF ajax功能和监听器方法。 自定义树按预期显示,但是当我点击<p:treeNode>元素时没有任何反应。

xhtml方:

<h:form id="form">
        <p:growl id="messages" showDetail="true" />         
        <p:tree id="entityTree" value="#{bean.entityTree}" var="node" animate="true" selectionMode="single" selection="#{bean.selectedNode}">

            <p:ajax event="select" update=":form:messages" listener="#{bean.onNodeSelect}" />
            <p:ajax event="expand" update=":form:messages" listener="#{bean.onNodeExpand}" />
            <p:ajax event="collapse" update=":form:messages" listener="#{bean.onNodeCollapse}" />

            <p:treeNode>
                <h:outputText value="#{node}" />
            </p:treeNode>
            <p:treeNode type="type-0">
                <h:outputText value="#{node}" />
            </p:treeNode>
            <p:treeNode type="type-1">
                <h:outputText value="#{node}" />
            </p:treeNode>
        </p:tree>
</h:form>

Bean方面:

@ManagedBean(name = "bean")
@ViewScoped
public class Bean implements Serializable {

    private static Logger logger = Logger.getLogger(BEntityTree.class);
    private TreeNode entityTree;    
    private TreeNode selectedNode;

    public BEntityTree() {
        // irrelevant
    }

    @PostConstruct
    private void onPostConstruct() {
        logger.trace("start");

        //create tree
        TreeNode aux, aux2;
        this.entityTree = new DefaultTreeNode("root", null);
        aux = new DefaultTreeNode("type-0", "nodo 1", this.entityTree);
        aux2 = new DefaultTreeNode("type-1", "nodo 1.1", aux);      
    }

    // this.entityTree's getter-setter

    // this.selectedNode's getter-setter;

    public void onNodeSelect(NodeSelectEvent event) {       
        logger.trace("start");
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, 
"Selected", event.getTreeNode().toString());
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void onNodeExpand(NodeExpandEvent event) {
        //...
    }

    public void onNodeCollapse(NodeCollapseEvent event) {
        //...
    }
}

我做错了什么?为什么在选择节点时甚至不调用onNodeSelect()侦听器?

0 个答案:

没有答案