Bonjour.
J'ai un petit soucis avec JSF (2.0.3), Primefaces (2.2.RC2) et Webflow (2.2.1.RELEASE). Je m'explique.
J'ai deux écrans :
- un premier, search.xhtml, qui permet de faire une recherche sur un dossier (flot associé : search.xml).
- un second, edit.xhtml, qui permet d'éditer un dossier (flot associé : edit.xml).
search.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!-- Page principale -->
<view-state id="searchView" view=".../search.xhtml">
<transition on="search" to="search"/>
<transition on="edit" to="editDossier">
<set name="flashScope.id" value="requestParameters.idDossier" type="java.lang.Long" />
</transition>
</view-state>
<!-- Recherche -->
<action-state id="search">
...
</action-state>
<!-- Détail Dossier -->
<subflow-state id="editDossier" subflow="edit">
<input name="idDossier" value="flashScope.idDossier" type="java.lang.Long" />
<transition to="searchView" />
</subflow-state> |
search.xhtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| ...
<!-- Formulaire de recherche -->
<h:form id="criteriaForm">
...
</h:form>
<!-- Formulaire de résultats -->
<h:form id="dossiersForm" prependId="false">
<p:dataTable id="dossiers" value="#{dossiersManager.beans}" var="dossier" emptyMessage="#{resourceBundle['results.none']}"
selection="#{dossiersManager.beanSelected}" selectionMode="single"
onRowSelectUpdate="pannel_selectedDossier"
onselectComplete="document.getElementById('editButton').click()" >
...
<p:dataTable>
</h:form>
<!-- Formulaire posté pour lancer l'edition du dossier sélectionné -->
<div style="display: none;">
<h:form id="editForm" prependId="false">
<p:outputPanel id="pannel_selectedDossier">
<h:inputHidden id="idDossier" name="idDossier" value="#{dossiersManager.beanSelected.id}" />
</p:outputPanel>
<p:commandButton id="editButton" action="edit" ajax="false" value="edit" />
</h:form>
</div>
... |
Comme vous l'avez peut-être constaté, mon problème est que la seule façon que j'ai trouvée pour faire appel à la transition edit de mon flot search.xml lorsqu'on clique sur un dossier du tableau de résultats, c'est simuler un clic sur le bouton editButton afin de faire un post avec l'identifiant du dossier sélectionné et la bonne transition d'appelée.
Je voudrais donc savoir comment faire d'une manière plus élégante.
J'ai voulu essayé de faire un
window.location=#{flowExecutionUrl}&_eventId=edit&idDossier=xxx
, comme j'ai l'habitude de le faire quand il s'agit de JSP, mais ça ne marche pas.
J'ai vu qu'avec RichFaces, on utilisait le code suivant pour solutionner mon problème
1 2 3 4 5 6 7 8
|
<rich:dataTable value="#{dossiersManager.beans}" var="dossier">
<a4j:support event="onRowClick" action="edit"
onsubmit="startWaiting();"
oncomplete="stopWaiting();">
<f:param name="idDossier" value="#{dossier.id}" />
</a4j:support>
</rich:dataTable> |
mais je n'ai pas trouvé les balises correspondantes avec PrimeFaces.
J'espère que vous pourrez m'aider, car ça m'ennuie de laisser le code dans cet état.
Cordialement.
Partager