Comment passer des paramètres à valueChangeListener dans p:dataTable?
Je fais appel valueChangeListener
sur un <h:selectBooleanCheckbox>
qui est à l'intérieur d'une dataTable. et que dataTable est de nouveau à l'intérieur de l'autre(extérieur) dataTable. Dans le valueChangeListener
méthode je veux l'instance d'objet de l'objet dataTable. Est-il possible d'obtenir l'objet de l'dataTable exemple?
EX:
<h:panelGroup id="panelId">
<p:dataTable id="outerDatatable"
var="supplier"
value="bean.supplierList">
<p:column>
<f:facet name="header">
<h:outputText value="Suppliers" />
</f:facet>
<h:outputText value="#{supplier.name}" />
</p:column>
<p:column>
<p:dataTable id="innerDataTable"
var="supplierAccount"
value="supplier.supplierAccountList">
<p:column>
<h:selectBooleanCheckbox id="booleanBoxId"
value="#{supplierAccount.supported}"
valueChangeListener="#bean.checkBoxListener}"
immediate="true"
onchange="this.form.submit();"/>
</p:column>
</p:dataTable>
</p:column>
</p:dataTable>
</h:panelGroup>
J'ai trouvé la solution suivante : j'ai utilisé <p:ajax>
auditeur au lieu de valueChangeListener
, et j'ai pu passer de "fournisseur" de l'objet ainsi que supplierAccount
objet de cette méthode d'écouteur. On peut passer n'importe quel nombre d'objets personnalisés à <p:ajax>
auditeur.
<p:column>
<h:selectBooleanCheckbox id="booleanBoxId"
value="#{supplierAccount.supported}"
immediate="true">
</h:selectBooleanCheckbox>
<p:ajax listener="#{bean.myListenerMethod(supplier,supplierAccount)}"
update=":formName:panelId"/>
</p:column>
OriginalL'auteur Amruta | 2011-12-05
Vous devez vous connecter pour publier un commentaire.
Dans ce cas particulier, vous pouvez l'obtenir par l'évaluation de la
#{supplier}
programme:Cependant, c'est laid, vous êtes en mode synchrone soumettre le formulaire en
onchange="submit()"
. Je vous recommande de jeter un peu de l'ajax.(le
render
attribut est à vous de voir)avec
Ou si votre environnement prend en charge EL 2.2 et donc de spécifier des arguments de méthode dans EL:
Voir aussi:
Sans rapport avec au problème concret, à l'aide de
onchange="submit()"
, il peut être utile de savoir queonchange
ne fonctionne pas comme prévu pour les cases à cocher dans IE6/7. C'obtenir seulement tiré sur tous les 2ème clic. - Vous plutôt souhaitez utiliseronclick="submit()"
à la place.OriginalL'auteur BalusC
Je vois que vous avez oublié une accolade ({) juste avant
bean
:Aussi, puisque vous êtes à l'aide de Primefaces, vous pouvez utiliser ses composants(si vous utilisez la version 3): http://www.primefaces.org/showcase-labs/ui/selectBooleanCheckbox.jsf
Il n'est pas nécessaire d'utiliser outputText si vous utilisez jsf 2:
Aussi il n'est pas nécessaire d'utiliser
f:facet
parce que lecolumn
composant est un attribut appeléheaderText
:C'est beaucoup plus simple de cette façon, n'est-ce pas?
PS: Qu'est-ce?
value="supplier.supplierAccountList"
Pas de #{ }?dialogues comme "merci pour ..", "bonjour .." etc formalités ne sont pas bien reçus. en effet, ils sont considérés comme spam.
Laissez l'homme merci 🙂 Au moins
hello
est en effet le spamOriginalL'auteur spauny