Bonjour Marc,
souvent c'est la raison pour laquelle on passe par l'analyse du type de la requête, comme cela tu ne changes pas l'appel de ton pipeline :
* si GET, on affiche le form de la première fois, avec aggrégation, ...
* si POST, c'est qu'on est en gestion de formulaire : on gère la continuation (et tu évites alors toute ton aggrégation)

Concrètement,
<map:match pattern="controller">
    <map:select type="request-method">
        <map:when test="POST">
            <!-- Tu n'appelles pas ton agrégation -->
            <map:call continuation="{request-param:continuation-id}"/>
        </map:when>
        <map:when test="GET">
            <!-- Tu appelles ton agrégation -->
            <map:call function="dispatch"/>
        </map:when>
    </map:select>
</map:match>

Jean-Christophe

Marc Salvetti a écrit :
Je vais essayer de coller le code de la sitemap qui rentre dans l'affichage
du form, tu verras peut etre mieux quel est mon probleme, car je ne vois
vraiment pas comment rappeler la continuation sans passer par l'aggregation.


Dans la sitemap :

La resource d'aggregation :

<map:resource name="composite">
<map:aggregate element="site" label="xml">
<map:part src="cocoon:/get-login"/>
<map:part src="cocoon:/book-{URI}.xml"/>
<map:part src="cocoon:/body-{URI}.xml"/>
</map:aggregate>
<map:transform src="stylesheets/site2xhtml.xsl">
<map:parameter name="resource" value="{request-param:resource}"/>
<map:parameter name="requestURI" value="{request-uri:requestURI}"/>
<map:parameter name="page" value="{URI}"/>
<map:parameter name="use-request-parameters" value="true"/>
</map:transform>
<map:select type="parameter">
<map:parameter name="parameter-selector-test" value="{form}"/>
<map:when test="true">
<map:transform src="resources/forms-samples-styling.xsl"/>
</map:when>
</map:select>
<map:transform type="i18n">
<map:parameter name="locale" value="{locale}"/>
</map:transform>
<map:select type="ajax-request">
<map:when test="true">
<map:serialize type="xml"/>
</map:when>
<map:otherwise>
<map:transform type="omitns"/>
<map:serialize type="html"/>
</map:otherwise>
</map:select>
<map:serialize type="xml"/>
</map:resource>

La resource form :
<map:resource name="form">
<map:generate type="jx" src="{form-template}"/>
<map:transform type="browser-update"/>
<map:transform type="i18n">
<map:parameter name="locale" value="{locale}"/>
</map:transform>
<map:transform src="resources/forms-samples-styling.xsl"/>
<map:transform type="i18n">
<map:parameter name="locale" value="{locale}"/>
</map:transform>
<map:select type="ajax-request">
<map:when test="true">
<map:serialize type="xml"/>
</map:when>
<map:otherwise>
<map:transform type="omitns"/>
<map:serialize type="html"/>
</map:otherwise>
</map:select>
</map:resource>

La resource d'appel de la fonction flowscript :

<map:resource name="view-cart">
<map:call function="form_cart2xml">
<map:parameter name="definitionURI" value="forms/cart-definition.xml"/>
<map:parameter name="bindingURI" value="forms/cart-binding.xml"/>
<map:parameter name="displayPipeline" value="view-cart-{suffix}.html"/>
</map:call>
</map:resource>

Le matcher de continuation :

<map:match pattern="**continue.html">
<map:act type="auth-loggedIn">
<map:parameter name="handler" value="cfmhandler"/>
<map:act type="auth-protect">
<map:parameter name="handler" value="cfmhandler"/>
<map:call continuation="{request-param:continuation-id}"/>
</map:act>
</map:act>
<map:call continuation="{request-param:continuation-id}"/>
</map:match>

Le matcher de la page du form sur lequel pointe la continuation
(display-pipeline ds la fct flowscript) :

<map:match pattern="view-cart-*.html">
<map:call resource="composite">
<map:parameter name="URI" value="view-cart-{1}"/>
<map:parameter name="locale" value="{../locale}"/>
<map:parameter name="form" value="true"/>
</map:call>
</map:match>

Le matcher du contenu de la page formulaire :

<map:match pattern="body-view-cart-*.xml">
<map:aggregate element="form_document">
<map:part src="xdocs/forms/cart.xml"/>
<map:part src="cocoon:/cart.form"/>
</map:aggregate>
<map:transform src="stylesheets/form_document2document.xsl"/>
<map:transform src="stylesheets/document2html.xsl"/>
<map:transform type="i18n">
<map:parameter name="locale" value="{../locale}"/>
</map:transform>
<map:transform src="resources/forms-samples-styling.xsl"/>

<map:serialize type="xml"/>
</map:match>

Le matcher interne commun a tous les formulaires :

<map:match pattern="*.form">
<map:call resource="form">
<map:parameter name="form-template" value="forms/{1}-template.xml"/>
<map:parameter name="action" value="{1}"/>
<map:parameter name="locale" value="{../locale}"/>
</map:call>
</map:match>

Dans ma template j'ai ça :
<ft:form-template action="continue.html" method="post" ajax="true"
ajax-action="??">

Et le probleme est donc que continue.html appele la continuation, qui
relance showForm(displayPipeline), et ce displayPipeline doit correspondre à
l'aggregation pour le premier appel (creation de la continuation) puis à un
autre pipeline (oui mais lequel et comment changer la valeur de
displayPipeline pendant l'execution de showForm ?) pour les appels suivants.

Est-ce que j'ai bon ?

Marc


Le 07/11/05, Marc Salvetti <[EMAIL PROTECTED]> a écrit :

Dans ajax-action, tu dois mettre l'action qui rappelle la continuation,

qui elle même, après traitement de la form, rappelera le pipeline
d'affichage.

Sylvain


Désolé, mais là je suis tout perdu :(
L'action qui est actuellement dans le parametre action est l'action qui
appelle la continuation.
Donc je comprend pas ce que ça va changer de mettre la meme action dans
ajax-action ?

Marc





Le 07/11/05, Sylvain Wallez <[EMAIL PROTECTED]> a écrit :

Marc Salvetti wrote:

Dans ajax-action, tu dois mettre l'action qui rappelle la continuation,
qui elle même, après traitement de la form, rappelera le pipeline
d'affichage.

Sylvain



Désolé, mais là je suis tout perdu :(
L'action qui est actuellement dans le parametre action est l'action qui
appelle la continuation.
Donc je comprend pas ce que ça va changer de mettre la meme action dans
ajax-action ?


Où se trouve ton aggrégation? Est-elle dans le pipeline appelé par
form.showForm()? Si oui, c'est là qu'est le problème: les requêtes Ajax
doivent rappeler la continuation, mais ne doivent pas passer par
l'aggrégation.

Sylvain

--
Sylvain Wallez Anyware Technologies
http://people.apache.org/~sylvain http://www.anyware-tech.com
Apache Software Foundation Member Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:[EMAIL PROTECTED]
Autres commandes : mailto:[EMAIL PROTECTED]






--

BlueXML
Jean-Christophe Kermagoret
Directeur associé
[EMAIL PROTECTED]


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:[EMAIL PROTECTED]
Autres commandes : mailto:[EMAIL PROTECTED]

Répondre à