Jsf 2 Primefaces将文档拖动到文件夹结构中

Jsf 2 Primefaces将文档拖动到文件夹结构中,jsf-2,primefaces,Jsf 2,Primefaces,我试图在Primefaces应用程序中实现一些拖放行为,例如,您有一个记录的p:datatable和一个表示文件夹结构的p:tree。理想情况下,我希望能够将文档从表中拖到树中的各个文件夹中,但我很难弄清楚您是如何做到这一点的 从我所看到的,树不支持其他非树组件将自己放入树节点,或者至少我看不到任何指示您可以这样做的内容 Primefaces无法实现此功能,或者有人能告诉我从哪里开始的正确方向吗?好的,我设法修改了Primefaces showcase中的一个自定义示例,以获得我想要的功能,关键

我试图在Primefaces应用程序中实现一些拖放行为,例如,您有一个记录的p:datatable和一个表示文件夹结构的p:tree。理想情况下,我希望能够将文档从表中拖到树中的各个文件夹中,但我很难弄清楚您是如何做到这一点的

从我所看到的,树不支持其他非树组件将自己放入树节点,或者至少我看不到任何指示您可以这样做的内容


Primefaces无法实现此功能,或者有人能告诉我从哪里开始的正确方向吗?

好的,我设法修改了Primefaces showcase中的一个自定义示例,以获得我想要的功能,关键元素如下所示:

XHTML列定义(列中的图像被拖动到文件夹):

上述javascript中引用的远程“tableToTree”命令:

<pf:remoteCommand name="tableToTree" actionListener="#{backingBean.tableToTree}" 
                update="documentTable"/>

最后,backingbean中的方法读取文件夹名和文档id,从中可以相应地更新模型:

public void tableToTree() {
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    System.out.println("folderName=" + params.get("folderName"));
    System.out.println("messageId=" + params.get("messageId"));
}
public void tabletore(){
Map params=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
System.out.println(“folderName=“+params.get”(“folderName”);
System.out.println(“messageId=“+params.get”(“messageId”);
}

谢谢。这个解决方案在某种程度上很有效。除非我关闭对话框并重新打开它,否则它只能在我的对话框中工作一次。为什么呢?另外,如果我想获取树节点的id而不是文本,我应该怎么做?
$('.ui-treenode-label').droppable({
    activeClass: 'ui-state-active',
    hoverClass: 'ui-state-highlight',
    tolerance: 'pointer',
    drop: function(event, ui) {
        var folderName = $(this).text();
        var spanId = document.getElementById(ui.draggable[0].id).parentNode.id;

        //span Id is of format document_{documentId}, so we need to discard the characters before the id
        var documentId = spanId.substring(spanId.indexOf("_")+1, spanId.length);

        tableToTree([
             {name: 'folderName', value:  folderName}
            ,{name: 'documentId', value: documentId}
        ]);
    }

 });
<pf:remoteCommand name="tableToTree" actionListener="#{backingBean.tableToTree}" 
                update="documentTable"/>
public void tableToTree() {
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    System.out.println("folderName=" + params.get("folderName"));
    System.out.println("messageId=" + params.get("messageId"));
}