Jeremy Quinn wrote:

Hi All,

I have some forms that used the JX Macro form generator and AJAX, that worked before the recent update to the 2.2 version of CForms, but fail now.

The form contains some regular text fields, a repeater with a row-add button and a union with associated selection widget.

The repeater works fine.

The union with it's selection widget stopped working when I updated.

I can see in TCPMon, when you change the selector menu, all the right data is submitted.

I get this error when the on-change event occurs for the union selector :

org.apache.cocoon.forms.FormsRuntimeException: Form is not a repeater
        at fd:form - file:/[blah]/forms/[blah]-model.xml:5:2
at <jx:if> - resource://org/apache/cocoon/forms/generation/ jx-macros.xml:214:54
        at <ft:repeater> - file:/[blah]/forms/[blah]-template.xml:30:35
        . . .

If I remove the repeater, the Union and it's selector work correctly.


I get a similar error under different circumstances.

Our pages use TimeBrowserUpdate widgets. That use the same BrowserUpdateTransformer to update small regions of the page, triggered by a timer on the Browser (and I still mean to commit this once I know where to put it).

This used to work as well. Since the update however, when you use one of these widgets in a page that also has a form that is generated using JX Macros, you get this error on update :

org.apache.cocoon.generation.JXTemplateGenerator$JXTException: java.lang.NullPointerException at <jx:if> - resource://org/apache/cocoon/forms/generation/ jx-macros.xml:45:52 at <ft:widget> - file:[blah]/forms/search-advanced- template.xml:17:55


Can you give also the first lines of the java stacktrace to know where the NPE happens?

When the TBU updates, it sends only it's own data, not that of the form.

If you set the fd:form/@ajax to false, then the union starts working, but the TBU still has the same error.

If you process the form using FormsTransformer instead of JXMacro generator, then it works as expected. (You have to switch between repeater and repeater widget, I don't know why).

I can see that the implementation of JX Macros has changed completely, but as of yet I cannot work out the cause of the problem.

Any suggestions would be welcome.


JX macros were largely refactored, and there was a little change to widget scoping within <ft:repeater>. This scoping defines the base widget that is used to resolve @id attributes on template instructions, which is also available as the ${widget} variable.

Within <ft:repeater> and before we enter <ft:repater-rows>, $widget is now the repeater itself whereas it previously was the parent of the repeater.

The "addcontact" widget in the dynamic_repeater sample is a good example of this change.

We previously had
 <ft:repeater id="contacts">
   ...
   <ft:repeater-rows>
     ...
   </ft:repeater-rows>
   <ft:widget id="addcontact"/>
 </ft:repeater>

whereas we now have
 <ft:repeater id="contacts">
   ...
   <ft:repeater-rows>
     ...
   </ft:repeater-rows>
   <ft:widget id="../addcontact"/>
 </ft:repeater>

Can this be the cause of your problem?

Sylvain

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

Reply via email to