Garvin Riensche wrote:
Hi there,

I want to figure out how database actions work and therefore i created a
small example where i only want to store a number from a form field into my
database. Although cocoon is connected correctly to my mysql database i
can't make coocon write something into it. Instead it always displays
error.html (look at sitemap). My configuration: Windows XP, Cocoon 2.1m2,
MySQL Ver 11.18 Distrib 3.23.54

the sitemap:

<?xml version="1.0"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0";>
<map:components>
  <map:actions>
    <map:action name="add-number"
      src="org.apache.cocoon.acting.DatabaseAddAction"/>
    <map:action name="form"
src="org.apache.cocoon.acting.FormValidatorAction"/>
  </map:actions>
</map:components>

<map:pipelines>
  <map:pipeline>
    <map:match pattern="hello">
      <map:read src="number.html" mimy-type="text/html"/>
    </map:match>
    <map:match pattern="send">
      <map:act type="form" action="add-number">

Sure this @action attribute is used?


        <map:parameter name="validate-set" value="add"/>
          <map:parameter name="descriptor" value="context://db/number.xml"/>
          <map:parameter name="form-descriptor" value="context://db/number.xml"/>

Off head, "form-descriptor" is unknown to the action.


<map:act type="add-number">

It appears you haven't passed the descriptor file to the "add-number" action. In addition, you should pass a table-set name to it, too. This is not required but let's you keep multiple table definitions in one file.

            <map:read src="confirm.html" mimy-type="text/html"/>
            <map:serialize/>
          </map:act>
      </map:act>
      <map:read src="error.html" mimy-type="text/html"/>
      <map:serialize/>
    </map:match>
  </map:pipeline>
</map:pipelines>
</map:sitemap>

If i understood it right, confirm.html should be processed if the action was
executed correctly and error.html if the action failed. But confirm.html is

Yes, this is right.


never executed in this case.

I couldn't use an action-set here like in the examples (webapp) because i
always got an error which seems to be an known cocoon bug. The sample webabb
didn't work correctly either.

Action-sets were long unsupported in 2.1 -- don't know if they were ever fixed. Personally, I don't like them :-)


It would be nice if someone could help.

I'd like to add two additional hints: You might be better off using flow + a OR-bridge like Hibernate or OJB. There are samples for this included
in the distribution and on the wiki. However, if you still would like to
use the above approach, I would highly recommend using the "modular"
database actions. They are a lot more versatile and have a more
consistent use.


When using the actions, you should not aim for a lot more than insert /
modify data straight away with just light syntactic checks. If you plan
complex validation or error handling, you should *really* look into flow
+ OJB or even the simple javascript DB layer contained in the petshop
sample.

Please check out the GetTogether'03 presentation on databases (cf wiki).

HTH
        Chris.


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



Reply via email to