Hi Per -

If you were using the formval logicsheet and the FormValidatorAction, 
you'd have something like this:

  <map:match pattern="newbook">
   <map:act type="form-validator">
    <map:parameter name="descriptor"
      value="context://newbook-def.xml"/>
    <map:parameter name="validate-set" value="add"/>

    <map:act type="db-insert">
     <map:parameter name="descriptor"
      value="context://newbook-def.xml"/>
     <map:redirect-to uri="books"/>
    </map:act>
   </map:act>
   <map:generate type="serverpages" src="addbook.xsp"/>
   <map:transform src="addbook.xsl"/>
   <map:serialize/>
  </map:match>

Here, the "newbook" pipeline is the action for your form and "books" is 
the pipeline for the display of books (not shown). When the "newbook" 
pipeline executes, the action "validator" tries to validate the posted 
form. If nothing was posted, or if the validation failed, execution 
drops outside that <map:act> block to the "addbook.xsp" page, which 
contains your form and which uses the formval logicsheet to access info 
on what failed during validation. If validation succeeds, then 
everything inside that <map:act> block gets executed which, as you can 
see, uses the DatabaseAddAction to insert the row in your database and 
then redirects the user to the "books" pipeline. Key to the 
DatabaseAddAction, FormValidatorAction and formval logicsheet is the 
descriptor file "newbook-def.xml". All these concepts are discussed in 
the Cocoon documentation.

The main gotcha here is the formval logicsheet is a bit clumsy to use, 
as you have to make sure you not only display validation errors to the 
user, but repopulate valid fields with the data the user already entered.

Regards,

Lajos

galatea.com
Cocoon training, consulting & support


Per Kreipke wrote:

> I can't quite figure out what the right way is to use actions to handle
> posting when there is an originating page, the form itself, a validator and
> an action.
> 
> Scenario:
> 
> - The user has a page which displays a collection of items of some sort
> (books).
>   + page: books.xyz
> 
> - clicking 'new' on the books page brings up a form for entering a new
> book's details
>   + page: newbook.xyz
> 
> - posting the book's details should validate the book's details (must have a
> title)
>   + validator action: ValidateBook.java
> 
> - Code adds the book to the book repository
>   + add action: AddBook.java
> 
> 
> Flows:
> 
> books.xyz -> [new book] -> newbook.xyz -> [post]
>       -> ValidateBook -> [ok] -> AddBook -> books.xyz
> 
> 
> books.xyz -> [new book] -> newbook.xyz -> [post]
>       -> ValidateBook -> [fail] -> newbook.xyz
> 
> 
> Details:
> 
> - to implement both flows above, I can't figure out what:
>   + the 'action' target of the POST should be: books.xyz again, newbook.xyz?
>   + what matcher to put the validate and add actions on
> 
> Any help would be appreciated. A pointer to or an actual sample sitemap
> snippet would be great.
> 
> FYI, I'm not using XMLForm and I'm using 2.0.3
> 
> Per
> 
> 
> ---------------------------------------------------------------------
> Please check that your question  has not already been answered in the
> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
> 
> To unsubscribe, e-mail:     <[EMAIL PROTECTED]>
> For additional commands, e-mail:   <[EMAIL PROTECTED]>
> 
> 


-- 




---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <[EMAIL PROTECTED]>
For additional commands, e-mail:   <[EMAIL PROTECTED]>

Reply via email to