Strange behavior of h:form inside a rich:datagrid
balteo Mar 29, 2011 11:34 AMHello,
I have a h:form inside a rich:datagrid and the action method of the form is never called. Moreover the prependId=false attribute is ignored.
Here is what the html looks like:
<form id="j_idt100:6:formulaireInscriptionSculpture" name="j_idt100:6:formulaireInscriptionSculpture" method="post" action="/jeanbaptistemartin/lang/fr/galerie" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt100:6:formulaireInscriptionSculpture" value="j_idt100:6:formulaireInscriptionSculpture" />
<table>
<thead>
<tr><th colspan="1" scope="colgroup">
<span class="formulaireFermer"><a class="fermerFormulaireInscription">Fermer</a></span></th></tr>
</thead>
<tfoot>
<tr><td colspan="1"><span class="inscriptionDescription">*(Vous serez informé(e) par email des nouvelles sculptures de Jean-Baptiste Martin au fur et à mesure qu'elles apparaitront sur le site)</span></td></tr>
</tfoot>
<tbody>
<tr>
<td>Restez informé(e) des nouvelles sculptures* :</td>
</tr>
<tr>
<td><table>
<tbody>
<tr>
<td><span id="j_idt100:6:abonneEmailP"><input id="j_idt100:6:email" type="text" name="j_idt100:6:email" value="" class="abonneEmail" size="15" title="Votre email" /></span></td>
<td><input id="j_idt100:6:soumettreInscription" name="j_idt100:6:soumettreInscription" onclick="RichFaces.ajax("j_idt100:6:soumettreInscription",event,{"incId":"1"} );return false;" value="Créer l'alerte" type="submit" /></td>
<td><span id="j_idt100:6:j_idt127"><span style="display:none" class="rf-st-start"><img src="/jeanbaptistemartin/images/ajax-loader-bar.gif" /></span><span class="rf-st-stop"></span><script type="text/javascript">new RichFaces.ui.Status("j_idt100:6:j_idt127")</script></span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td><span id="j_idt100:6:messageEmailP"><span id="j_idt100:6:messageEmail"></span></span></td>
</tr>
</tbody>
</table>
<span id="j_idt100:6:j_idt131" style="display: none;"><script type="text/javascript">reinitialiserFormulaire=function(){RichFaces.ajax("j_idt100:6:j_idt131",null,{"incId":"1"} )};</script></span><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-1981625827725610618:434758034946481652" autocomplete="off" />
</form>
Here is the jsf:
<rich:dataGrid value="#{galerieView.sculptures}" var="sculpture" columns="3" styleClass="datagrid-galerie" iterationStatusVar="iterations">
<h:panelGroup rendered="#{!iterations.last}">
<p>
<pretty:link mappingId="sculptureAction" styleClass="miniature-link">
<f:param value="#{view.locale.language}"/>
<f:param value="#{jbm:normaliserURL(sculpture.sculpturei18nMap[view.locale.language].titre)}" />
<f:param value="#{sculpture.sculptureID}" />
<h:graphicImage value="#{initParam['com.jeanbaptistemartin.static.url']}/#{sculpture.photoMiniature}" styleClass="miniature-image" alt="#{sculpture.sculpturei18nMap[view.locale.language].titre}, #{sculpture.sculpturei18nMap[view.locale.language].matiere}, #{jbm:renvoyerAnnee(sculpture.annee)}."/>
</pretty:link>
</p>
<p>
<pretty:link mappingId="sculptureAction" styleClass="miniature-link-text">
<f:param value="#{view.locale.language}"/>
<f:param value="#{jbm:normaliserURL(sculpture.sculpturei18nMap[view.locale.language].titre)}" />
<f:param value="#{sculpture.sculptureID}" />
<h:outputText value="#{sculpture.sculpturei18nMap[view.locale.language].titre}, " />
<h:outputText value="#{sculpture.sculpturei18nMap[view.locale.language].matiere}" />
</pretty:link>
</p>
</h:panelGroup>
<h:panelGroup rendered="#{iterations.last}" styleClass="miniature-link">
<p id="sellette">
<img src="#{facesContext.externalContext.requestContextPath}/images/200x200.gif" class="miniature-image" alt="" onclick="slideUp()"/>
</p>
<div class="formulaireInscriptionSculpture">
<h:form id="formulaireInscriptionSculpture" prependId="false">
<ui:include src="WEB-INF/include/formulaire-inscription-sculpture.xhtml"/><!-- todo: ne fonctionne pas... -->
</h:form>
</div>
</h:panelGroup>
<rich:jQuery name="slideUp" query="slideUp({duration:'slow'});slideDownForm()" selector="#sellette"/>
<rich:jQuery name="slideDownForm" query="slideDown({duration:'slow'})" selector="div.formulaireInscriptionSculpture" />
<rich:jQuery name="slideDownSellette" query="slideDown({duration:'slow'})" selector="#sellette"/>
</rich:dataGrid>
Here is the included form:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<a4j:region>
<h:panelGrid columns="1">
<f:facet name="header">
<span class="formulaireFermer"><a href="" class="fermerFormulaireInscription"><h:outputText value="#{msg['formulaire.fermer']}"/></a></span>
</f:facet>
<h:panelGroup>
<h:outputText value="#{msg['inscription.accroche']}"/>
</h:panelGroup>
<h:panelGroup>
<h:panelGrid columns="3">
<a4j:outputPanel id="abonneEmailP">
<h:inputText id="email" styleClass="abonneEmail" title="#{msg['message.from.email']}" value="#{gestionnaireInscriptionView.abonneEmail}" required="true" label="#{msg['message.from.email']}" requiredMessage="#{msg['message.valeurRequise.email']}" size="15">
<f:validator validatorId="adresseEmailValidator"/>
</h:inputText>
</a4j:outputPanel>
<a4j:commandButton id="soumettreInscription" action="#{gestionnaireInscriptionView.sauvegarderAbonne}" value="#{msg['creer.alerte']}" render="messageEmailP,abonneEmailP" type="submit"/>
<ui:include src="status-bar.xhtml"/>
</h:panelGrid>
</h:panelGroup>
<h:panelGroup>
<a4j:outputPanel id="messageEmailP"><h:message id="messageEmail" for="email" showSummary="true" showDetail="false" infoClass="champValide" errorClass="champInvalide"/></a4j:outputPanel>
</h:panelGroup>
<f:facet name="footer">
<h:outputText value="#{msg['inscription.description']}" styleClass="inscriptionDescription"/>
</f:facet>
</h:panelGrid>
</a4j:region>
<a4j:jsFunction name="reinitialiserFormulaire"
immediate="true"
render="email"
actionListener="#{gestionnaireInscriptionView.reinitialiserFormulaire}"/>
</ui:composition>
Does anyone have any idea why my app exhibits this behaviour?
Thanks in advance,
J.