【问题标题】:JSF Primefaces Datatable selectionMode for without unique id没有唯一 ID 的 JSF Primefaces Datatable selectionMode
【发布时间】:2018-12-06 16:51:00
【问题描述】:

我正在开发基于浏览器的 ftp 客户端。我正在使用 org.apache.commons.net.ftp.FTPFile 3.6 和 Primefaces 6.2。对于实际文件上下文的可视化表示,我使用了 PF 的 DataTable 组件。现在我遇到了以下问题/挑战。因为我想在双击时选择文件并执行某些操作,所以我启用了 selectionMode。这是jsf代码

<p:dataTable id="ftptable" var="file" value="#{fTPBean.actualFolderContent}" `selectionMode="single" selection="#{fTPBean.selectedFile}" rowKey="#{file}>
<p:column headerText="File/Folder">     
    <h:outputText value="#{file.name}" />
</p:column>

<p:column headerText="File Info">
    <h:outputText value="#{file.rawListing}" />
</p:column>
</p:/dataTable>

这不起作用,因为 rowKey 应该是唯一标识符,而 org.apache.commons.net.ftp.FTPFile 不是来自数据库或不是我设计的东西。 实际上,我的目标是允许选择文件/文件夹并在单击时执行操作。双击。

dataTable 有没有办法解决这个问题,或者我在这里做的事情完全错了。在这种情况下,欢迎您对我进行 -1,但非常欢迎您提供理由;)!

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    您始终可以为org.apache.commons.net.ftp.FTPFile 创建一个包装类,它应该是可识别的并包含 FTPFile 实例。在这种情况下,您可以简单地使用此包装器的集合,在 DataTable 中表示它们并对它们执行操作。

    public class FTPFileWrapper implements Serializable {
    
        private static final long serialVersionUID = 3653846184126846410L;
    
        private Integer id;
    
        private FTPFile ftpFile;
    
        public FTPFileWrapper(Integer id, FTPFile ftpFile) {
            this.id = id;
            this.ftpFile = ftpFile;
        }
    
        //getters and setters
    }
    

    您需要创建一个 FTPFileWrapper 的 fTPBean.actualFolderContent 集合,并使用一些唯一的 id 值(它可以只是一个简单的 int 变量增量)和您想要在 UI 中显示的 FTPFile 进行填充。

    要显示文件的名称,您可以通过file 访问它,如下所示:

    <p:column headerText="File/Folder">     
        <h:outputText value="#{file.ftpFile.name}" />
    </p:column>
    

    或修改包装器,直接访问它的文件字段,如下所示:

    public class FTPFileWrapper implements Serializable {
    
        ...
    
        public String getFileName() {
            if (ftpFile != null) {
                return ftpFile.getName();
            }
            return "N/A";
        }
    }
    

    <p:column headerText="File/Folder">     
        <h:outputText value="#{file.fileName}" />
    </p:column>
    

    【讨论】:

    • 斯坦尼斯拉夫您好,谢谢!确实这就是我想到的,但我没有更新这个。尽管如此,您已经在此处描述了解决方案,就像它是如何工作的一样!
    猜你喜欢
    • 2012-06-06
    • 2011-07-24
    • 2012-10-01
    • 2013-10-03
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多