I put some example code to show what I try to do and discribe my
problem. I show this based on modify jumpstart ajaxformloop example
http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/formloop1:
Example.tml
<table>
<tbody t:type="AjaxFormLoop" t:source="persons" t:value="person"
t:encoder="personEncoder">
<t:submitnotifier>
<t:delegate to="block:apFormFragmentBlock"/>
<t:block id="apFormFragmentBlock">
<tr>
<td><input t:type="TextField" t:id="firstName"
t:value="person.firstName"/></td>
<td><input t:type="TextField" t:id="lastName"
t:value="person.lastName"/></td>
<td><input t:type="Select" t:id="region"
value="person.region"/></td>
<td>
<t:removerowlink>remove</t:removerowlink>
</td>
<td>
<div id="copyCurrentRow">copy current row</div>
</td>
</tr>
<tr>
<td>
<div t:type="FormInjector" t:id="injector" id="injector"/>
</td>
</tr>
</t:block>
</t:submitnotifier>
<p:addRow>
<tr>
<td colspan="6" style="text-align: right">
<t:addrowlink>Add a row</t:addrowlink>
</td>
</tr>
</p:addRow>
</tbody>
</table>
Example.java
@Getter
private Person person;
@Inject
private Block apFormFragmentBlock;
@OnEvent(EventConstants.ACTION)
public Block onAction(){
// In real code this should be copy of existion element
this.person = new Person();
return apFormFragmentBlock;
}
example.js
$("#copyCurrentRow").bind('click', function() {
$("#injector").tapestryFormInjector("trigger");
});
My problems:
1) Insisde ajax form loop id od injector element changes, but I propably
find solution in jquery how to find this element
2) When I click on copy I have exception and I don't know how to do this
in ajax form loop context :
Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException: No
object of type org.apache.tapestry5.corelib.internal.AjaxFormLoopContext
is available from the Environment. [at
classpath:pl/raiffeisen/aml/gs/presentation/components/tabs/ApData.tml,
line 94]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:153)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.render(ComponentPageElementImpl.java:209)
at
org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
... 146 more
Caused by: org.apache.tapestry5.ioc.util.UnknownValueException: No
object of type org.apache.tapestry5.corelib.internal.AjaxFormLoopContext
is available from the Environment.
at
org.apache.tapestry5.internal.services.EnvironmentImpl.peekRequired(EnvironmentImpl.java:88)
at $Environment_128a351287b.peekRequired(Unknown Source)
at $Environment_128a351277a.peekRequired(Unknown Source)
at
org.apache.tapestry5.internal.transform.EnvironmentalWorker$EnvironmentalConduit.get(EnvironmentalWorker.java:59)
at
org.apache.tapestry5.corelib.components.RemoveRowLink.conduit_get_context(RemoveRowLink.java)
at
org.apache.tapestry5.corelib.components.RemoveRowLink.beginRender(RemoveRowLink.java:56)
at
org.apache.tapestry5.corelib.components.RemoveRowLink.beginRender(RemoveRowLink.java)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.invokeComponent(ComponentPageElementImpl.java:202)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133)
... 148 more
W dniu 2013-04-10 19:41, b...@softwaremind.pl pisze:
Ok, I try to explain my problem clearly.
I implemented dynamic generation of form inputs using ajax form loop.
I used Tapestry core remove and add row components to remove and add
new input fields form fragment. It works perfectly. But my client want
to make button on each ajax form loop row (similar to standard remove
button) which should copy existing (read from DB) or newly completed
row and paste it below current element. I try to used form fragment or
add add row component to implement this task but it doesn't work. I do
not quite know how to approach this problem. Perhaps you could give me
some simple example how to do this or give a link to ready solution.
Maybe someone has already solved similar problem or write copy
existing row component. I can attach some source code but is it a lot
and complicated.
W dniu 2013-04-10 18:50, Lenny Primak napisał(a):
This question isn't nearly detailed enough or worded in a way that is
possible to answer.
On Apr 10, 2013, at 9:56 AM, Bartlomiej Kalata wrote:
Hi,
I have problem to implement some funtionality using Tapestry 5.6.3
I'm using ajaxformloop to add new row and remove exisiting, but I
must write duplicate option for each row, which copy current row and
inject it below exisiting element with data from existing row. Can
you tell me what is the best way to do this task?
--
Bartłomiej Kalata
Software Engineer II
Software Mind SA | Focused on Results
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
--
Bartłomiej Kalata
Software Engineer II
Software Mind SA | Focused on Results