11
votes

Comment obtenir l'indice de ligne sélectionné dans JSF DataTable?

J'ai une base de données sur index.xhtml xxx pré>

mon haricot: p> xxx pré>

mon problème est que je reçois toujours le même index Dans le journal du serveur, même si je clique sur les différents boutons d'édition. Imaginez qu'il y a une seule collection fournie à la clé. Je n'ai pas montré que dans le haricot. P>

Si je change de portée de la vue de la vue à la demande, cela fonctionne bien. Que peut être le problème avec @viewscoped code>? Merci d'avance :) p>

EDIT: P>

public void editBook(ActionEvent ev) throws IOException{
    if (ev.getSource() != null && ev.getSource() instanceof HtmlDataTable) {
        HtmlDataTable objHtmlDataTable = (HtmlDataTable) ev.getSource();
        System.out.println(objHtmlDataTable.getRowIndex());
    }
}


3 Réponses :


1
votes

Ce que vous pouvez faire est d'utiliser le [getRowData ()] [1] méthode code> sur le bean Java pour obtenir directement l'objet situé sur la ligne qui héberge le bouton sur lequel l'utilisateur a cliqué.

Un exemple de code: p>

<h:commandButton value="Edit" actionListener="#{IndexBean.editBook}"/>


4 commentaires

Bonjour Romaintaz, mais j'ai essayé votre solution et cela ne semble pas fonctionner. Je continue à obtenir des exceptions "sévère: reçu" javax.el.methodnotfoundexception "lors de l'appelant à l'écoute d'action '# {indexbean.editbook}' pour le composant 'j_idt35' grave: javax.el.methodnotfoundexception: méthode non trouvée: indexbean@d15176.editbook ( ) "S'il vous plaît aider :(


Bonjour, s'il vous plaît lisez mon édition. J'ai fait exactement ce que vous avez dit et j'ai toujours obtenu une méthode d'exceptionFoundException. Je n'ai pas compris ce que vous vouliez dire par "En outre, ne modifiez pas de modifier la signature de la méthode EditBook () en définissant un argument javax.faces.event.ActionEvent." Je n'ai rien de défini dans Face-config.xml. Dès que je passe d'action d'action, il commence à dire la méthodeNotFoundException


Désolé, je voulais dire "ne pas oublier modifier la signature de la méthode". Supprimer le lance ioexception car il est inutile. De plus, le code de votre méthode est incorrect dans votre édition, car la source ne sera pas le htmldatatable lui-même. Vous devrez mettre en œuvre la méthode getparentTatable () comme spécifié pour extraire l'objet DataTable.


Salut Romaintaz, la méthode ne fonctionne toujours pas. Il donne la méthodeNotFoundException. L'as tu essayé?



15
votes

Vous avez déjà lié le Code> Composant sur le haricot. Tout ce que vous avez à faire est:

public void editBook() throws IOException{
    int index = datatableBooks.getRowIndex(); // Actually not interesting info.
    Book book = (Book) datatableBooks.getRowData(); // This is what you want.
}


5 commentaires

Bonjour Balusc, votre article est génial comme d'habitude :). Votre réponse fonctionne si mon haricot est @RequestScopé. Mais ma vraie question reste toujours, pourquoi ne travaille-t-il pas dans @viewscoped? Si je viens de changer d'annotation de @requestScoped à @viewscoped, j'ai toujours la réponse que j'ai eu la 1ère fois. J'ai besoin de ma bean pour être @viewscoped. Quelle solution puis-je faire?


Où chargez-vous booklist ?


Je le charge dans le rappel @postConstruct. Est-ce que je fais quelque chose de mal? Où devrais-je charger?


WOW! C'est un excellent article Balusc, tout ce dont nous avons besoin d'un jeu de données :)


@KRSNA: Il suffit d'ajouter une colonne avec des cases à cocher / Radiobuttons pour une sélection de plusieurs lignes.



0
votes

Si vous utilisez EL 2.2, par exemple avec tomcat7, vous pouvez essayer xxx

J'espère aider


0 commentaires