没有唯一 ID 的 JSF Primefaces 数据表选择模式
JSF Primefaces Datatable selectionMode for without unique id
我正在使用基于浏览器的 ftp 客户端。我正在使用 org.apache.commons.net.ftp.FTPFile 3.6 和 Primefaces 6.2。对于实际文件上下文的可视化表示,我使用 PF 的 DataTable 组件。现在我遇到了以下problem/challenge。因为我想 select 文件并在双击时执行某些操作,所以我启用了 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 不是来自数据库的东西,也不是我设计的。
实际上,我的目标是允许 files/folders 被 selected 并在点击 resp 时执行操作。双击。
dataTable 是否没有办法解决这个问题,还是我在这里做的事情完全错误。在这种情况下,欢迎您对我进行-1,但非常欢迎提供理由;)!
您始终可以为 org.apache.commons.net.ftp.FTPFile
创建一个包装器 class,它应该是可识别的并包含 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
变量递增)和 FTPFile 您想在你的 UI.
中展示
要显示文件名,您可以通过 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>
我正在使用基于浏览器的 ftp 客户端。我正在使用 org.apache.commons.net.ftp.FTPFile 3.6 和 Primefaces 6.2。对于实际文件上下文的可视化表示,我使用 PF 的 DataTable 组件。现在我遇到了以下problem/challenge。因为我想 select 文件并在双击时执行某些操作,所以我启用了 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 不是来自数据库的东西,也不是我设计的。 实际上,我的目标是允许 files/folders 被 selected 并在点击 resp 时执行操作。双击。
dataTable 是否没有办法解决这个问题,还是我在这里做的事情完全错误。在这种情况下,欢迎您对我进行-1,但非常欢迎提供理由;)!
您始终可以为 org.apache.commons.net.ftp.FTPFile
创建一个包装器 class,它应该是可识别的并包含 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
变量递增)和 FTPFile 您想在你的 UI.
要显示文件名,您可以通过 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>