3

ファイル ダウンロード オプションが XHTML から呼び出されないという奇妙な問題があります。私はJSFに非常に慣れていないので、基本的なことを台無しにしているかもしれませんが、助けていただければ幸いです。

これは私の XHTML です

<p>Files List</p>
<h:form prependId="false">
    <p:dataTable value="#{pc_ArchiveFiles.archiveFiles}" var="fs"
        paginator="true" rows="5"
        paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
        rowsPerPageTemplate="5,10,15">
        <f:facet name="header">  
            Client Files  
        </f:facet>
        <p:column>
            <f:facet name="header">
                File Name
            </f:facet>
             <h:outputText value="#{fs.fileName}" /> 
        </p:column>
        <p:column>
            <f:facet name="header">
                File Size
            </f:facet>
            <h:outputText value="#{fs.fileSizeInKB}" />
        </p:column>
        <p:column>
            <f:facet name="header">
               Download File
            </f:facet>
            <p:commandLink id="downloadLink" value="Download" ajax="false">  
                    <p:fileDownload value="#{pc_ArchiveFiles.downloadPDF}" />
            </p:commandLink> 
        </p:column>
    </p:dataTable>
</h:form>

これがバッキングビーンです

@ManagedBean(value = "pc_ArchiveFiles")
@RequestScoped
public class ArchiveFiles extends PageCodeBase {
private static final Logger logger = LoggerFactory
        .getLogger(ArchiveFiles.class);
 @Value("${archive.location}")
private String repository;
public List<ArchiveFile> getArchiveFiles() {


    Map<String, String> params = FacesContext.getCurrentInstance()
            .getExternalContext().getRequestParameterMap();
    subCategory = params.get("categoryName");

    // Build request object
    ArchiveFilesRequest request = new ArchiveFilesRequest();
    request.setCaseWorkerId(SecurityUtil.getLoggedInUser().getLoggedUserId());
    request.setClientId(getSelectedConsumer().getConsumerId());
    request.setCategoryName(subCategory);
    ArchiveFilesResponse response = archiveService.getArchiveFiles(request);
    if((response.getResponseType() == ResponseType.SUCCESS || response.getResponseType() == ResponseType.WARNING) && response.getFileCount() > 0) { // There is at least one file
        archiveFiles = new ArrayList<ArchiveFile>();
        archiveFiles.addAll(response.getFileSet());
        return archiveFiles;
    } else {
        return Collections.<ArchiveFile> emptyList();
    }
}


 public void downloadPDF() throws IOException {

        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();

        facesContext.responseComplete();
    }

}

ダウンロードリンクを表示する JSF ページ

ダウンロードをクリックすると、 downloadPDF() が呼び出されます。しかし、downloadPDF() の代わりに getArchiveFiles() メソッドを再度呼び出しているようです。p:CommandLink を以下のコードに変更しましたが、それでも正しいメソッドが呼び出されません。それに加えて、これが機能する場合は、ファイル名パラメーターも渡す必要があります。

<h:commandLink id="downloadLink" value="Download PDF" target="_blank" action="#{pc_ArchiveFiles.downloadPDF}" />
4

1 に答える 1

0

p:fileDownloadの値属性はStreamedContent のインスタンスである必要があります。174 ページのドキュメントを確認してください。以下のコードのようなものである必要があります。

     <p:commandButton id="downloadLink" value="Download" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)"   
        icon="ui-icon-arrowthichk-s">  
    <p:fileDownload value="#{fileDownloadController.file}" />  
</p:commandButton>  



 private StreamedContent file;  
 public StreamedContent getFile() {  
        return file;  
    }    
public void setFile(StreamedContent file){
 InputStream stream = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/images/optimusprime.jpg");  
        file = new DefaultStreamedContent(stream, "image/jpg", "downloaded_optimus.jpg");  
}

h:commandLinkから起動されたdownloadPDF()リスナーが必要な場合は、action 属性の代わりに actionListener を使用する必要があります。

<h:commandLink id="downloadLink" value="Download PDF" target="_blank" actionListener="#{pc_ArchiveFiles.downloadPDF}" />
于 2012-09-28T18:06:41.277 に答える