Ajax rendre attribut ne fonctionne pas dans un h:dataTable dans JSF2
J'ai un problème avec une application simple en JSF 2.0.
J'essaie de construire une Liste de choses à faire avec de l'ajax. J'ai quelques todo cordes, qui je l'affichage à l'aide d'une datatable. À l'intérieur de ce datatable j'ai un commandLink pour supprimer une tâche. Le problème est maintenant que le datatable ne pas re-rendus.
<h:dataTable id="todoList" value="#{todoController.todos}" var="todo">
<h:column>
<h:commandLink value="X" action="#{todoController.removeTodo(todo)}">
<f:ajax execute="@this" render="todoList" />
</h:commandLink>
</h:column>
<h:column>
<h:outputText value="#{todo}"/>
</h:column>
</h:dataTable>
Merci pour votre aide.
Modifier (TodoController):
@ManagedBean
@SessionScoped
public class TodoController {
private String todoStr;
private ArrayList<String> todos;
public TodoController() {
todoStr="";
todos = new ArrayList<String>();
}
public void addTodo() {
todos.add(todoStr);
}
public void removeTodo(String deleteTodo) {
todos.remove(deleteTodo);
}
/* getter /setter */
}
nous montrer les parties pertinentes de
code ajouté de todoController
todoController
code ajouté de todoController
OriginalL'auteur u2ix | 2010-03-11
Vous devez vous connecter pour publier un commentaire.
(On dirait que je n'ai pas assez de réputation pour commenter les réponses des autres)
Je pense que FRotthowe suggère d'habillage de la table avec un autre élément et le référencement à l'aide de référence absolue (c'est à dire. le nom de toutes les conteneurs parents à partir de la racine du document) à partir de la <f:ajax> tag.
Quelque chose comme ceci:
Mais, à l'aide des références absolues est toujours une source de problèmes et augmente de façon exponentielle le refactoring temps que la vue se développe.
N'est-ce pas là un moyen de rendre la table à partir d'un <f:ajax> tag (prévention de la jsf de l'ajout de ces ennuyeux ":number_of_row" dans l'ajax de l'événement)?
au lieu d'un wrapper, utilisez le composant module pour naviguer vers le haut de la hiérarchie:<f:ajax render=":#{composant.parent.parent.parent.idclient}" />
OriginalL'auteur Toni Penya-Alba
Je suppose que le <h:dataTable> est fermée par un formulaire?
Après aux prises avec ce problème pendant un certain temps, j'ai googlé un moyen facile et propre solution: ajouter @formulaire de à rendre attribut de <f:ajax> et le tour est joué!
Exemple complet:
L'intégralité de l'article qui m'a aidé est ici: http://blogs.steeplesoft.com/2009/10/jsf-2-hdatatable-and-ajax-updates/
OriginalL'auteur zarazek
utiliser ce code:
OriginalL'auteur shahab kondri
J'ai rencontré le même problème et a trouvé que si vous mettez un élément (par exemple ) autour de la table et rerender, ce sera le travail. Je ne suis cependant pas tout à fait sûr de savoir pourquoi il est comme ça. Quelqu'un?
u2ix afficher le code une fois que vous avez ajouté l'élément d'habillage.
OriginalL'auteur FRotthowe
Pour quelque raison JSF est en train de modifier le code dans le <f:ajax> tag dans le bouton. Si j'écris ce xhtml:
- Je obtenir ce code html:
Notez que l'id dans le deuxième bouton est "j_idt7:table:0" alors que je m'attends à obtenir 'j_idt7:table' comme je le fais dans la première.
Qui ne résout pas le problème, mais il peut aider à trouver une solution de contournement.
h:form
élément de votre code d'exemple pour ce que l'élément est dans le produit de balisage, mais pas dans votre code source.Oui, le h:balise form s'est perdu au cours de la copier et de la coller. Fixe.
OriginalL'auteur Toni Penya-Alba
Vous devez ajouter prependId="false" à votre h:formulaire
OriginalL'auteur user307434
Je suis tombé sur le même problème.
Une chose qui "fonctionne" est l'ajout de richfaces à votre projet, et le remplacement de la
par un
Qui va générer l'id correct.
OriginalL'auteur IJC