À l'aide d'un bouton de commande dans une Page jsf pour télécharger un fichier

À l'aide d'un bouton de commande dans une Page jsf pour télécharger un fichier. Aide: JSF & Richfaces.

J'ai une table (s'étend ExtendedDataModel implémente Modifiables, Serializable), avec quelques données et dans chaque ligne d'un bouton "télécharger".

<a4j:commandButton id="getDownload" value="download" 
    style="margin-left:10px;margin-right:10px;width:100px;"
    action="#{controller.download}" immediate="true" ajaxSingle="true">
    <f:setPropertyActionListener target="#{controller.idString}" value="#{item.id}" />                     
</a4j:commandButton>

Je créer le fichier dans le contrôleur:

public void download(){
 OutputStream out = null;
....

FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
out = response.getOutputStream();

ZipOutputStream zipout = new ZipOutputStream(out);
.....

zipout.close();
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\""+filename+"\"");
out.flush();
....

} finally {
    try {
        if (out!=null){
            out.close();
        }
        FacesContext.getCurrentInstance().responseComplete();
    } catch (IOException e) {
        logger.error(e);
    }

}
...
}

Le Problème a commencé, quand j'ai mis en place le ExtendedDataModel mon auto.
Au début, j'ai utilisé h:commandLink, mais la méthode de contrôleur n'a jamais été appelé... j'ai essayé et essayé... maintenant, la bonne méthode est appelée, mais les (zip) contenu du fichier est affiché dans la page. Je veux un bouton/lien sur la page, l'utilisateur peut cliquer pour télécharger le fichier. La page elle-même ne devrait pas changer. Des idées?

Je peux créer une servlet, mais je ne comprends pas pourquoi le ExtendedDataModel changé le comportement des liens à l'intérieur.

Edit1

J'ai utilisé

<h:commandLink id="getDownload" value="download" action="#{controller.download}">                                                       
                            <f:setPropertyActionListener target="#{controller.idString}" value="#{item.id}" />                              
                        </h:commandLink>

avant. Il fonctionne avec la "normale" richfaces table, mais pas quand je l'ai utilisé à l'intérieur de mon propre tableau qui s'étend ExtendedDataModel.

Edit 2 - Solution/Solution De Contournement

Il est impossible d'utiliser le h:commandButton, .. Lien... que ce soit à l'intérieur de l'auto fait de la table, pour télécharger un fichier. Je suis maintenant à l'aide d'un bouton dans le tableau de rendre une nouvelle PanelGroup et un deuxième bouton à l'intérieur de la nouvelle PanelGroupt à télécharger le fichier.
J'ai googlé beaucoup pour cette, ressemble à un riche visages bug.

OriginalL'auteur M.R. | 2010-12-02