Qu'est-ce que <f:ajax exécuter=“@all”> vraiment censés faire? Elle affiche uniquement l'affichage de la forme
désolé si je suis d'épaisseur, mais qu'est-ce que l'execute="@tous" dans un f:ajax tag vraiment censés faire? Je m'attendais à soumettre tous les éléments sur une page, mais il semble afficher uniquement les valeurs dans l'affichage de la forme, pas de toutes les formes sur la page.
Par exemple
<h:body>
<h:form id="form1">
Input1/Form1 <h:inputText id="testinput" value="#{testBean.input1}" />
</h:form>
<h:form id="form2">
Input2/form2 <h:inputText id="testinput2" value="#{testBean.input2}" />
<h:commandButton value="Ok" actionListener="#{testBean.al}">
<f:ajax execute="@all" />
</h:commandButton>
</h:form>
</h:body>
Seulement form2 est affiché sur cliquez sur.
À l'aide de mojarra 2.0.2..
Cela m'a déconcerté. Si execute="@form" exécution de toutes les entrées dans le formulaire, on peut supposer @tous feraient plus que la forme, c'est à dire. toutes les formes.
Confusion en effet. Vérifier java.net/jira/browse/JAVASERVERFACES-1719 et java.net/jira/browse/JAVASERVERFACES-1908 pas Encore résolu, je suppose.
Le JIRA cas relevés sont fermés comme incomplète, et fonctionne comme prévu.
Confusion en effet. Vérifier java.net/jira/browse/JAVASERVERFACES-1719 et java.net/jira/browse/JAVASERVERFACES-1908 pas Encore résolu, je suppose.
Le JIRA cas relevés sont fermés comme incomplète, et fonctionne comme prévu.
OriginalL'auteur dave | 2010-06-08
Vous devez vous connecter pour publier un commentaire.
La
execute="@all"
était juste une erreur majeure lors de la conception de JSF2 spec. JSF sorte d'abstraction trop de de son formulaire HTML en fonction de la nature, en oubliant que c'est en fait un générateur de code HTML.Dans HTML, la soumission d'une forme différente de celle d'un enfermement est refusé. Donc
execute="@all"
ne fonctionnera jamais, de ce point de vue. Il se comporte exactement de la même chose queexecute="@form"
. Étant donné que le JSF est juste un générateur de code HTML, le même "problème" va frapper JSF trop. Il n'est pas possible de traiter plusieurs<h:form>
composants à la fois.Si vous avez vraiment besoin de cette fonctionnalité pour une raison quelconque, vous devriez prendre du recul et de revoir la mauvaise façon dont vous regardez des formulaires HTML. Vous devez vous assurer que vos formes sont conçus de telle façon que vous n'avez jamais besoin d'informations à partir d'un autre formulaire.
Voir aussi:
PrimeFaces déjà réalisé très tôt que
@all
était fondamentalement mauvais. C'est exactement pourquoi ils n'ont jamais pris en charge@all
dansprocess
attribut de, leur équivalent deexecute
. Ils ont d'abord jamais pris en charge@all
dansupdate
, leur équivalent derender
. Cependant, le seul monde réel de cas d'utilisation où cela fait sens a été la manipulation d'une pleine page d'erreur lors de l'ajax d'exception, donc ils ont finalement apportéupdate="@all"
de retour après j'ai créé leFullAjaxExceptionHandler
. Leprocess="@all"
aura toujours exactement le même effet queprocess="@form"
.Toutefois, le même PrimeFaces bibliothèque aussi involontairement fait le imaginé le comportement de
execute="@all"
possible par l'intermédiaire de son a par la suite introduitpartialSubmit="true"
fonction de laquelle vous spécifiez explicitement toutes les autres formes, comme ci-dessous (le PFS@(form)
est juste par souci de simplification, une collection codé en dur comme:formId1 :formId2 :formId3
etc est également possible).Cela fonctionne parce que
partialSubmit="true"
prépare leprocess="xxx"
à côté client plutôt que côté serveur. En d'autres termes, au lieu d'envoyer l'ensemble joignant le formulaire à partir du serveur vers le client et en traitant les entrées spécifiées, il envoie uniquement les entrées spécifiées à partir du serveur vers le client, puis les processus de tous. Notez que lorsquepartialSubmit
est absent ou dans l'ensemble defalse
, alors il serait encore envoyer uniquement l'affichage de la forme. Cette inconduite doit pas être invoqué. Ils peuvent corriger ce mauvais comportement de leur côté, tôt ou tard.Voir aussi:
BalusC: quelles alternatives proposez-vous pour ce que vous légitimement appeler une mauvaise pratique (chaque solution est une mauvaise pratique! )?
Comme pour ce que j'ai l'intention de l'utiliser, c'est stackoverflow.com/q/34182816/4142984 . Je voudrais transférer le modificateur de masque pour le serveur. Et le corrigé de plein droit maintenant, serait me forcer à mettre une personne h:inputHidden dans chaque composant qui permettrait de l'utiliser au lieu d'avoir un singleton h:formulaire inputHidden qui pourrait être utilisé par chaque composant qui a besoin de cette fonctionnalité.
BallusC, je suis vraiment un newbie, donc excusez mon si je ne comprends pas votre suggestion. Juste pour vérifier: comme je l'ai lu, vous suggérez que je devrais place la fonctionnalité du navigateur dépendant de javascript et/ou écrire mon propre facelets?
"Dans votre question, vous êtes particulièrement en demandant une solution de contournement", et bien, pas vraiment. Je ne plaint qu'il n'y a pas de solution de contournement pour éviter l'omniprésent marquage tout en double. Ce que j'ai posée était la suivante: "les idées de ce que je fais de mal ou de la façon dont pourrait être fixé?"
OriginalL'auteur BalusC
Voici une citation de JavaServer Faces 2.0 - La référence complète, page 352:
Je pense que de ce fait indique clairement que les champs de tous les formulaires doivent être transmis avec la requête AJAX.
Cependant, même avec Mojarra 2.0.3 cela n'arrive pas. Malgré des matières de la
execute
attribut (si vous mettez une liste de formulaires ou@all
) uniquement l'affichage de la forme reçoit ses " champs soumis. Si cela semble être un bug. Je soulève une question à propos de cette à moins qu'il n'altèrent point de vue?OriginalL'auteur Tuukka Mustonen
Il faudrait exécuter=":form1 form2" (si vous avez le séparateur par défaut), mais de toute façon non, il ne le fait pas. Il envoie seulement le second.
Si vous mettez @tous, dans la première forme, il envoie seulement le premier. Au moins sur Safari 5/Firefox 3.6.3 de toute façon. Je pense qu'on devrait regarder la mojarra javascript pour en savoir plus.
OriginalL'auteur dave
Avez-vous essayé?
T-il envoyer les deux formes de données si vous le mentionner explicitement?
Autant que je sache, vous avez raison: @tous représente l'ensemble de la page.
OriginalL'auteur Vítor E. Silva Souza