J'ai actuellement 2 boutons de commande et une liste. Basé sur la sélection de la liste, le résultat généré peut être affiché dans un fichier téléchargeable ou rendu sous forme de tableau HTML. Le code getFile()
est basé sur BalusC's PDF Handling tutorial, alors que getTable()
définit resultTable
.h: actions commandButton multiples: télécharger le fichier et rendre le tableau ajax
<h:form>
<fieldset>
<h:selectManyListbox id="listbox" value="#{form.items}">
<f:selectItems value="#{form.allItems}">
</h:selectManyListbox>
</fieldset>
<h:commandButton value="Get File" action="#{form.getFile}">
<h:commandButton value="Get Table" action="#{form.getTable}">
<f:ajax render="result_table" execute="listbox" />
</h:commandButton>
<h:panelGrid id="result_table">
<table>
<thead></thead>
<tbody>
<ui:repeat var="table" value="#{form.resultTable}">
</ui:repeat>
</tbody>
</table>
</h:panelGrid>
Les deux boutons fonctionnent correctement jusqu'à présent. Cependant, je veux combiner les deux actions en un seul bouton. Quand je le teste avec un bouton qui déclenche les deux actions, rien ne se passe (pas de sauvegarde de fichier comme boîte de dialogue ou rendu). Est-ce parce qu'une action est ajax ou parce que l'autre action se termine par facesContext.responseComplete();
?
<h:commandButton value="Get Both" action="#{form.getBoth}">
<f:ajax render="result_table" execute="listbox" />
</h:commandButton>
getBoth() {
getTable();
getFile();
}
De plus, je voudrais une case à cocher où si elle est cochée, enregistrer en tant que boîte de dialogue apparaît et la table est rendue. Si elle n'est pas cochée, seule la table est rendue.
Merci pour l'explication. Je vais continuer à utiliser les deux boutons. – luciaengel
Il y a vraiment un moyen. Voir mise à jour. – BalusC
J'ai déjà la Content-Disposition en pièce jointe, mais au lieu d'un fichier en entrée 'input = new BufferedInputStream (nouveau FileInputStream (fichier), DEFAULT_BUFFER_SIZE);' , j'ai un autre inputStream 'new BufferedInputStream (nouveau ByteArrayInputStream (output_b. toByteArray()), DEFAULT_BUFFER_SIZE); 'parce que le fichier est créé à la volée dans' output_b' sans enregistrer au serveur. Donc je ne pense pas que je serais capable d'utiliser ça surclic. – luciaengel