hi all, 

did some hard core research, and found the following bug in the
XMLFormTransformer.java:

the "unrolling" of the "recorded" tags like "itemset" and "repeat" is
only done if: 

class XMLFormTransformer .... {
...
Object _value ;
...

...
void unrollItemSetTag( DocumentFragment aFragment ) {
...
while ( ... )
..
        if ( _value != null ) {
                /* do the stream of the fragment */
        }
}
...
...

now it comes:
_value is set by Form.getValue( xpath ), which is the @ref Attribute of
according the xmlform element.

I think the _value null-checking is done in order to test that a valid
form control was found before, but _value gets also null if there is a
correct field in the object but the bean property is not initialized for
instance String or List, like that:

class Bean {

        Map    allLangues = ... 
        String language;

        public Set allLanguages( ) {
                return allLanguages.entrySet( );
        }
        public String getLanguage( ) { ... }
        public void setLanguage( String value ) { ... }
} 


now given this example, if you to the following control:

<xf:selectOne ref="language" >
  <xf:itemset nodeset="/allLanguages">
    <xf:caption ref="value" />
    <xf:value ref="key" />
  </xf:itemset>
</xf:selectOne>

this will never display an initialized listbox, as:

inside XMLFormTransformer:

_value = Form.getValue( "language" );

will be null, when the form is in the start phase.

so I propose changing the _value checking to a boolean state variable.

like:
boolean haveRefBoundElement = false;

and after doing:
in "startELementSimpleFIeld( ... ) "
value_ = form.getValue( ref )
haveRefBoundElement = true;

and then change the streaming part of the 

void unrollItemSetTag( DocumentFragment docFragment ) 
....
while ( ... ) {
..
if ( haveRefBoundElement )
{
  // stream back the recorder repeat content
  DOMStreamer streamer = new DOMStreamer( this, this);
  streamer.stream( docFragment );
}
..
}


-- Jakob


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

Reply via email to