Hi,
we have grid inside form and we get this error:
Caused by: java.lang.IllegalStateException: The rendered content did not
include any elements that allow for the positioning of the hidden form
field's element.
at
org.apache.tapestry5.corelib.internal.HiddenFieldPositioner.getElement(HiddenFieldPositioner.java:90)
at
org.apache.tapestry5.corelib.components.Zone.afterRender(Zone.java:226)
at org.apache.tapestry5.corelib.components.Zone.afterRender(Zone.java)
.......
The form is wrapped inside zone and the grid is inside second zone. We know
the partial form updates are not supported without form fragment etc., but
we only want to display data via the grid inside the form, and be able to
update it with ajax (hence the other zone).
The structure is:
zone
form
zone
grid
Now I thought that if I just make the grid volatile, everything would be ok.
However, the stack leads to zone that tries to alter the form hidden input.
Then I found this in grid:
....
442 Object setupRender()
443 {
444 if (formSupport != null)
445 formSupport.store(this, SETUP_DATA_SOURCE);
446
447 setupDataSource();
....
Is this intentional - even if the grid is volatile the formSupport is used
to store the setup data source event, which causes the zone to call the
hiddenFieldPositioner in row 226.
If I change the code to this:
Object setupRender() {
setupDataSource();
// If there's no rows, display the empty block placeholder.
return null;
}
everything works ok. So the if should be if (formSupport != null &&
!volatile)?
The real tml is here:
<c:dialog t:id="organizationEditDialog" title="literal:Lisää uusi"
updateOnSuccess="organizationList" checkChangedValues="true">
<c:errors />
<c:ctextfield placeholder="Syötä koodi" c:label="literal:Koodi"
value="organizationToEdit.identifier" validate="required" />
<c:ctextfield placeholder="Syötä tietovarastokoodi"
c:label="literal:Tietovarastokoodi"
value="organizationToEdit.externalIdentifier" validate="required" />
<t:zone t:id="attrsZone" id="attrsZone">
<t:grid t:id="attrs" inplace="true"
source="organizationToEdit.attributes" row="attribute" volatile="true"
formState="none" add="delete" include="name,description">
<p:nameCell>${attrName}</p:nameCell>
<p:descriptionCell>${attrDescription}</p:descriptionCell>
<p:deleteCell><t:actionlink t:id="deleteAttr"
context="attribute.id"
zone="attrsZone">Poista</t:actionlink></p:deleteCell>
</t:grid>
</t:zone>
<div class="actions">
<c:dialogsubmit class="btn primary"
value="literal:Tallenna"
dialog="organizationEditDialog" />
<c:dialogcloselink class="btn"
dialog="organizationEditDialog">Peruuta</c:dialogcloselink>
</div>
</c:dialog>
The dialog defines the form, so it is not visible in this tml.
So, is it time for another JIRA (with patch), or have I misunderstood
something?
- Ville
--
View this message in context:
http://tapestry.1045711.n5.nabble.com/T5-3-Volatile-grid-inside-form-tp5017357p5017357.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]