我有一个允许您下载文件的数据表。有用。但是,当我尝试下载一个文件后,返回的过滤首先在列表中。
此图显示,当点击teste4.txt时,下载了相同的文件。这是对的。
这张照片显示,点击文件teste4.txt后,过滤后,下载的文件为teste1.txt
这是我的包含数据表的文件:
<h:form id="hFormListaArquivosRegiao2" enctype="multipart/form-data">
<p:dataTable id="pDataTableListaArquivos" var="arquivo" value="#{arquivoBean.listaArquivos}" filteredValue="#{arquivoBean.filteredListaArquivos}">
<p:column id="pColumnNomeArquivo" headerText="#{msg.NomeDoArquivo}" sortBy="#{arquivo.nomeArquivo}" filterMatchMode="contains" filterBy="#{arquivo.nomeArquivo}">
<h:commandLink action="#{arquivoBean.download}" title="#{arquivo.nomeArquivo}">
<h:outputText value="#{arquivo.nomeArquivo}" />
<f:setPropertyActionListener target="#{arquivoBean.arquivo}" value="#{arquivo}" />
</h:commandLink>
</p:column>
</h:form>
<h:form id="hFormListaArquivosRegiao2" enctype="multipart/form-data">
<p:dataTable id="pDataTableListaArquivos" var="arquivo" value="#{arquivoBean.listaArquivos}" filteredValue="#{arquivoBean.filteredListaArquivos}">
<p:column id="pColumnNomeArquivo" headerText="#{msg.NomeDoArquivo}" sortBy="#{arquivo.nomeArquivo}" filterMatchMode="contains" filterBy="#{arquivo.nomeArquivo}">
<h:commandLink action="#{arquivoBean.download}" title="#{arquivo.nomeArquivo}">
<h:outputText value="#{arquivo.nomeArquivo}" />
<f:setPropertyActionListener target="#{arquivoBean.arquivo}" value="#{arquivo}" />
</h:commandLink>
</p:column>
</h:form>
这是backingBean负责下载的方法:
public void download() throws Exception {
logger.debug("NOME ARQUIVO: "+ ContextoBean.CAMINHO_ARQUIVOS + arquivo.getNomeArquivo() +", "+ arquivo.getNomeArquivo());
FacesContext facesContext = FacesContext.getCurrentInstance();
pushArquivo(facesContext.getExternalContext(), ContextoBean.CAMINHO_ARQUIVOS + arquivo.getNomeArquivo(), arquivo.getNomeArquivo());
facesContext.responseComplete();
}
这是backingBean的辅助方法,负责下载:
public void download() throws Exception {
logger.debug("NOME ARQUIVO: "+ ContextoBean.CAMINHO_ARQUIVOS + arquivo.getNomeArquivo() +", "+ arquivo.getNomeArquivo());
FacesContext facesContext = FacesContext.getCurrentInstance();
pushArquivo(facesContext.getExternalContext(), ContextoBean.CAMINHO_ARQUIVOS + arquivo.getNomeArquivo(), arquivo.getNomeArquivo());
facesContext.responseComplete();
}
答案 0 :(得分:0)
如果我是你,我会做一些改变,通过方法参数得到当前的arquivo:
<h:commandLink action="#{arquivoBean.download(arquivo)}">
<h:outputText value="#{arquivo.nomeArquivo}" />
</h:commandLink>
在豆子里:
public void download(Arquivo arquivo) throws Exception {
FacesContext facesContext = FacesContext.getCurrentInstance();
pushArquivo(facesContext.getExternalContext(),
ContextoBean.CAMINHO_ARQUIVOS + arquivo.getNomeArquivo(),
arquivo.getNomeArquivo());
facesContext.responseComplete();
}