Not sure what knowledge you're talking about ;-) It was my own silly
mistake in the snippet below. BUT once this searcher is working I'll
might write some hands on Cocoon forms material on my blog... I used
cocoonforms intensively in the past so I could blog a more advanced
showcase.
<div class="preview">
<ft:form-template
action="#{$cocoon/continuation/id}.continue" method="POST">
<ft:widget id="properties"> <!-- should become
<ft:repeater id="properties"/> -->
<table>
<tbody>
<ft:repeater-rows>
<tr>
<td>
<ft:widget id="propertyName"/>
</td>
</tr>
</ft:repeater-rows>
</tbody>
</table>
</ft:widget> <!-- should become <ft:repeater/> -->
</ft:form-template>
</div>
-----Original Message-----
From: Jeroen Reijn [mailto:[email protected]]
Sent: Tuesday, September 15, 2009 1:38 PM
To: [email protected]
Subject: Re: Cocoon 2.2 / Cocoon forms repeater problem
Robby,
thanks for sharing this knowledge! It's much appreciated!
Regards,
Jeroen
Robby Pelssers wrote:
Solved ;-)
<ft:widget id=/"properties"/> should become <ft:repeater
id=/"properties"/>
Cheers,
Robby
*From:* Robby Pelssers [mailto:[email protected]]
*Sent:* Tuesday, September 15, 2009 1:04 PM
*To:* [email protected]
*Subject:* RE: Cocoon 2.2 / Cocoon forms repeater problem
I just took a look at
"servlet:forms:/resource/internal/xsl/forms-field-styling.xsl" and
following snippets would explain my problem. Is it correct to assume
<ft:repeater> get's replaced by <fi:repeater> by the jxmacroshelper
and finally the forms-field-styling.xsl does it's job? Then where do
I
get the opportunity to overrule the layout/representation of my
repeater??
Robby
<!--+
| fi:repeater
+-->
<xsl:template match="fi:repeater">
<input type="hidden" name="{...@id}.size" value="{...@size}"/>
<input type="hidden" name="{...@id}.page" value="{...@page}"/>
<table id="{...@id}" border="1">
<xsl:apply-templates select="." mode="css"/>
<tr>
<xsl:for-each select="fi:headings/fi:heading">
<th>
<xsl:value-of select="."/>
</th>
</xsl:for-each>
</tr>
<xsl:apply-templates select="fi:repeater-row"/>
</table>
</xsl:template>
<!--+
| fi:repeater-row
+-->
<xsl:template match="fi:repeater-row">
<tr>
<xsl:for-each select="*">
<td>
<xsl:apply-templates select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
*From:* Robby Pelssers [mailto:[email protected]]
*Sent:* Tuesday, September 15, 2009 12:20 PM
*To:* [email protected]
*Subject:* RE: Cocoon 2.2 / Cocoon forms repeater problem
Oh...
The generated html code looks like below. I still see <fi:widgets>
in
the output... Is that correct? Or am I just missing some
transformation
step?
Robby
<form state="active" locale="en-US"
action="403253117e5a6e366c70082b4f680a1002327f03.continue"
method="POST"
id="N10073" dojoType="forms:SimpleForm">
<input value="15" name="properties.size" type="hidden"/>
<input value="" name="properties.page" type="hidden"/>
<table border="1" id="properties" class="forms repeater
active">
<tr>
<th/>
<th/>
<th/>
</tr>
<tr>
<td>
<fi:widgets>
<span
id="properties.0.propertyName" class="forms field output">iec</span>
<span
id="properties.0.datatype">
<select name="properties.0.datatype" id="properties.0.datatype:input"
title="" class="forms field active">
<option value="string" selected="selected">string</option>
<option value="integer">integer</option>
<option value="long">long</option>
<option value="double">double</option>
<option value="date">date</option>
<option value="char">char</option>
<option value="decimal">decimal</option>
</select>
</span>
<span
id="properties.0.operator">
<select name="properties.0.operator" id="properties.0.operator:input"
title="" class="forms field active">
<option value="EQUALS">=</option>
<option value="IS_NULL">is null</option>
<option value="IS_EMPTY">is empty</option>
<option value="CONTAINS">contains</option>
</select>
</span>
</fi:widgets>
</td>
</tr>
<tr>
<td>
<fi:widgets>
<span
id="properties.1.propertyName" class="forms field
output">packageOutlineVersionCode</span>
<span
id="properties.1.datatype">
<select name="properties.1.datatype" id="properties.1.datatype:input"
title="" class="forms field active">
<option value="string" selected="selected">string</option>
<option value="integer">integer</option>
<option value="long">long</option>
<option value="double">double</option>
<option value="date">date</option>
<option value="char">char</option>
<option value="decimal">decimal</option>
</select>
</span>
<span
id="properties.1.operator">
<select name="properties.1.operator" id="properties.1.operator:input"
title="" class="forms field active">
<option value="EQUALS">=</option>
<option value="IS_NULL">is null</option>
<option value="IS_EMPTY">is empty</option>
<option value="CONTAINS">contains</option>
</select>
</span>
</fi:widgets>
</td>
</tr>
.... More table rows
</table>
</form>
*From:* Robby Pelssers
*Sent:* Tuesday, September 15, 2009 12:05 PM
*To:* [email protected]
*Cc:* Robby Pelssers
*Subject:* Cocoon 2.2 / Cocoon forms repeater problem
Hi all,
I'm trying to build a form using cocoon forms and the snippets below
show my setup. What I basically do in flowscript is creating the form
from the formdefinition.xml and I pass this form on to the
ObjectSearcher java class which populates the widgets with the correct
values.
*this*.form = *new* Form("cocoon://formdefinition");
*this*.objectSearcher = *new* ObjectSearcher(*this*.form.form,
*this*.packageSelector.getProperties());
However, when I open the page containing the form, it looks like if
the
form DOES NOT TAKE INTO ACCOUNT the way my template defines it. The
output I get is attached (searchform.gif). I would expect in this
case
to ONLY see the propertyName widget in the output.
Anybody an idea if I forgot something in the configuration?
I added "/resource/internal/xslt/forms-samples-styling.xsl" and In my
servlet config I also added two entries:
<entry key=/"ajax"/
value-ref=/"org.apache.cocoon.ajax.impl.servlet"//>
<entry key=/"forms"/
value-ref=/"org.apache.cocoon.forms.impl.servlet"//>
Thx in advance,
Robby Pelssers
Formdefinition.xml
<?xml version=/"1.0"/ encoding=/"UTF-8"/?>
<fd:form xmlns:fd=/"http://apache.org/cocoon/forms/1.0#definition"/>
<fd:widgets>
<fd:repeater id=/"properties"/>
<fd:widgets>
<fd:field id=/"propertyName"/ state=/"output"/>
<fd:datatype base=/"string"//>
</fd:field>
<fd:field id=/"datatype"/>
<fd:datatype base=/"string"//>
<fd:selection-list>
<fd:item value=/"string"//>
<fd:item value=/"integer"//>
<fd:item value=/"long"//>
<fd:item value=/"double"//>
<fd:item value=/"date"//>
<fd:item value=/"char"//>
<fd:item value=/"decimal"//>
</fd:selection-list>
</fd:field>
<fd:field id=/"operator"/>
<fd:datatype base=/"string"//>
</fd:field>
</fd:widgets>
</fd:repeater>
</fd:widgets>
</fd:form>
Searchform.jx:
<div class=/"preview"/>
<ft:form-template
action=/"#{$cocoon/continuation/id}.continue"/ method=/"POST"/>
<ft:widget id=/"properties"/>
<table>
<tbody>
<ft:repeater-rows>
<tr>
<td>
<ft:widget id=/"propertyName"//>
</td>
</tr>
</ft:repeater-rows>
</tbody>
</table>
</ft:widget>
</ft:form-template>
</div>
Sitemap.xmap:
<map:match pattern=/"formdefinition"/>
<map:generate src=/"page/templates/formdefinition.xml"//>
<map:serialize type=/"xml"/ />
</map:match>
<map:match pattern=/"search"/>
<map:call function=/"search"/ />
</map:match>
<map:match pattern=/"searchform.jx"/>
<map:generate src=/"page/templates/searchform.jx"/ type=/"jx"/
/>
<map:transform
src=/"resource/internal/xslt/forms-samples-styling.xsl"/>
<map:parameter name=/"dojo-resources"/
value=/"{servlet:ajax:/resource/external/dojo}"//>
<map:parameter name=/"forms-resources"/
value=/"{servlet:forms:/resource/external/forms}"//>
</map:transform>
<map:serialize type=/"xhtml"/ />
</map:match>
Flowscript:
importClass(Packages.com.nxp.spider2.parametricsearch.cforms.ObjectSearc
her);
*function* search() {
*var* searcher = *new* Searcher();
}
*function* Searcher() {
*this*.initialize();
}
Searcher.prototype.initialize = *function*() {
cocoon.load("servlet:forms:/resource/internal/flow/javascript/Form.js");
*this*.packageSelector = cocoon.getComponent("packageSelector");
*this*.form = *new* Form("cocoon://formdefinition");
*this*.objectSearcher = *new* ObjectSearcher(*this*.form.form,
*this*.packageSelector.getProperties());
*this*.showForm();
}
Searcher.prototype.showForm = *function*() {
*this*.form.showForm("searchform.jx");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]