ICE Faces - 从ice发送文件名参数到bean:outputResource

时间:2012-04-08 12:05:34

标签: datatable icefaces param

我有acefaces数据表与文件名,一个在行,我正在尝试使用ice:outputResource添加一个下载按钮,但我无法将文件名发送到outputResourceBean。

我的数据表看起来像:

<h:form id="exportedFiles">
       <ace:dataTable value="#{exportBean.allFiles}" var="upload" 

                    <ace:column>
                        <f:facet name="header" >
                            <h:outputText value="Název souboru"/>
                        </f:facet>    
                        <h:outputText value="#{upload.name}"/>
                    </ace:column>

                    <ace:column>
                        <f:facet name="header" >
                            <h:outputText value="Dowload file"/>
                        </f:facet>      
                        <ice:outputResource id="downLink" 
                                            resource="#{outputResource.pdfResource}"
                                            attachment="true"
                                            label="Download PDF"
                                            type="button">
                        </ice:outputResource>
                    </ace:column>
                </ace:dataTable>
            </h:form>

我的豆子看起来像这样:

public static final String PDF_NAME = "Download_PDF.pdf";
public static final Resource PDF_RESOURCE = new MyResource(PDF_NAME);
public String getPdfName() { return PDF_NAME; }
public Resource getPdfResource() { return PDF_RESOURCE; }

我可以使用#{upload.name}获取文件名,但我不知道如何在点击“下载”按钮时将其发送到bean ...

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以将包含文件的列表包装到ListDataModel中。这允许您访问当前所选行索引的数据。

@ManagedBean
@ViewScoped
public class ExportBean {

    private ListDataModel<MyResource> allFiles;

    public ListDataModel<MyResource> getAllFiles() {
        if (allFiles == null) {
            List<MyResource> files = new ArrayList<MyResource>();
            files.add(new MyResource("doc1.pdf"));
            files.add(new MyResource("doc2.pdf"));
            files.add(new MyResource("doc3.pdf"));
            files.add(new MyResource("doc4.pdf"));
            files.add(new MyResource("doc5.pdf"));
            allFiles = new ListDataModel<MyResource>(files);
        }
        return allFiles;
    }

    public String getPdfName() {
        // add the getResourceName method to MyResource
        return allFiles.getRowData().getResourceName();
    }

    public Resource getPdfResource() {
        return allFiles.getRowData();
    }
}

xhtml页面看起来像这样:

<h:form id="exportedFiles">
    <ace:dataTable value="#{exportBean.allFiles}">
        <ace:column>
            <h:outputText value="#{exportBean.pdfName}" />
        </ace:column>
        <ace:column>
            <ice:outputResource resource="#{exportBean.pdfResource}" attachment="true" label="Download PDF" type="button" />
        </ace:column>
    </ace:dataTable>
</h:form>