JSF Primefaces Datatable selectionMode для без уникального идентификатора - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю над браузерным ftp-клиентом.Я использую org.apache.commons.net.ftp.FTPFile 3.6 и Primefaces 6.2.Для визуального представления фактического контекста файла я использую компонент DataTable из PF.Теперь я столкнулся со следующей проблемой.Поскольку я хочу выбрать файлы и выполнить определенные действия по двойному щелчку, я включаю режим 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 меня, но причина очень приветствуется;)!

1 Ответ

0 голосов
/ 07 декабря 2018

Вы всегда можете создать класс-оболочку для 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
}

И вам нужно создать fTPBean.actualFolderContent коллекцию FTPFileWrapper и заполнитьесли с каким-то уникальным значением id (это может быть просто int приращение переменной) и 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...