Sorry, I tried to draw a model of your page but I don't quite get it.

The techniques used in that JumpStart page's components may have a problem when 
they're nested deeper. They're done better in the JumpStart preview for T5.4:

        
http://jumpstart.doublenegative.com.au/jumpstart7/together/ajaxcomponentscrud/persons

A key improvement is the passing of the component's context in each request, 
and using them to restore the component's parameters, rather than relying on 
the page context and @ActivationRequestParameter.

I don't know if these thoughts are addressing the source of your problem, but I 
hope they help.

Cheers,

Geoff

On 27/03/2014, at 1:42 AM, abangkis wrote:

> Or maybe someone has an example of a single page site made with tapestry.
> I've tried jumpstart
> http://jumpstart.doublenegative.com.au/jumpstart/together/ajaxcomponentscrud/personsit's
> something similar but able to be nested 3-4 component deep.
> 
> Thanks for any clue.
> 
> Cheers.
> 
> 
> On Tue, Mar 25, 2014 at 3:18 PM, abangkis <abang...@gmail.com> wrote:
> 
>> Hello,
>> 
>> I have 3 nested object. A survey, a section and a question. A survey will
>> contain sections and a section will contain questions. I want to create a
>> single page editor for this nested object using ajax.
>> 
>> In add survey page i have created two zone, survey zone and
>> sectionListZone. The survey zone content will depend on a flag. It can show
>> an input form for the survey or a view of the survey data. The
>> sectionListZone content is a SectionHolder component (custom component for
>> handling the section).
>> 
>> The SectionHolder component also contains two zone, sZone and qZone. The
>> sZone content also depend on a flag, to show an input form for the section
>> or to view the section data. The qZone content is a QuestionHolder
>> component (custom component for handling the questions).
>> 
>> I've managed to create the add survey page to add & view the survey data.
>> I also manage to create the section holder component by using the same
>> pattern as the add survey page (using ajax response renderer to render both
>> zone when the form is submitted). The problem is in the SectionHolder
>> component i can't render multiple zone using ajax renderer. Returning a
>> block from onSuccess will work. But using ajax renderer to render the zone
>> will result this error :
>> 
>> Element 'sZone' does not have an associated Tapestry.ZoneManager object.
>> 
>> Communication with the server failed: TypeError: Cannot call method
>> 'getStorage' of null
>> 
>> Here's my code for the Add Survey page & the Section Holder.
>> Thanks
>> 
>> === Add Survey TML ===
>> 
>> <t:zone t:id="surveyZone" id="surveyZone">
>> <form t:type="form" t:id="frmCreateSurvey" t:zone="^">
>> <div>
>> <t:delegate to="surveyBlock"/>
>> </div>
>> <div>
>> <t:errors/>
>> </div>
>> </form>
>> 
>> <hr/>
>> </t:zone>
>> 
>> <div>
>> <t:zone t:id="sectionListZone" id="sectionListZone">
>> <t:delegate to="sectionListBlock"/>
>> </t:zone>
>> </div>
>> 
>>        <t:block id="addSurveyBlock">
>> <t:label for="title"/>
>> <t:textfield t:id="title" value="survey?.title" t:validate="required,
>> maxlength=35" size="35"/>
>> <input type="submit" value="Save"
>> class="btn btn-sm btn-primary"/>
>> </t:block>
>> <t:block id="viewSurveyBlock">
>> SURVEY BLOCK <br/>
>> Title : ${survey?.title}
>> <a t:type="actionlink" t:id="editSurvey" t:zone="surveyZone" href="#"
>> class="btn btn-sm btn-primary">Edit</a>
>> </t:block>
>> 
>> <t:block id="viewSectionListBlock">
>> <t:section.SectionHolder t:id="sectionHolder"/>
>> </t:block>
>> 
>> <t:block t:id="emptyBlock"/>
>> 
>> ====== Add Survey.Java =========
>>        @Inject
>> private AjaxResponseRenderer ajaxRenderer;
>> @Inject
>> private Block addSurveyBlock, viewSurveyBlock, viewSectionListBlock,
>> emptyBlock;
>> 
>>    @Inject
>>    private Request request;
>> 
>>    @InjectComponent
>>    private Zone surveyZone, sectionListZone;
>> 
>> @Property
>> @Persist // TODO erase this when we use database
>> private Survey survey;
>> 
>> @Persist
>> private boolean isReadyToPublish;
>> @Persist
>> private boolean isEditSurvey;
>> @Persist
>> private boolean isSectionShown;
>> 
>> void onSuccess() {
>> isEditSurvey = false;
>> isSectionShown = true;
>> if(request.isXHR()) {
>> ajaxRenderer.addRender(surveyZone).addRender(sectionListZone);
>> }
>> }
>> public Object getSurveyBlock() {
>> return isEditSurvey ? addSurveyBlock : viewSurveyBlock;
>> }
>> public Object getSectionListBlock() {
>> return isSectionShown? viewSectionListBlock : emptyBlock;
>> }
>> 
>> void onActionFromEditSurvey() {
>> isEditSurvey = true;
>> if(request.isXHR()) {
>> ajaxRenderer.addRender(surveyZone);
>> }
>> }
>> 
>> 
>> === SectionHolder Component tml ===
>> <t:content>
>> <h4>Section</h4>
>> <t:zone t:id="sZone" id="sZone">
>> <form t:type="form" t:id="frmCreateSection" t:zone="^">
>> Section 1
>> <div id="sectionDiv">
>> <t:label for="name"/>
>> <t:textfield t:id="name" value="name" />
>> <input class="btn btn-sm btn-primary" type="submit" value="Save"/>
>> </div>
>> <div>
>> <t:errors/>
>> </div>
>> </form>
>> </t:zone>
>> 
>> <div>
>> <t:zone t:id="qZone" id="qZone">
>> Question Block
>> </t:zone>
>> </div>
>> </t:content>
>> 
>> === Section Holder.java ===
>> 
>>    @Inject
>>    private Request request;
>> 
>>    @Inject
>>    private AjaxResponseRenderer ajaxRenderer;
>> 
>>    @InjectComponent
>>    private Zone sZone, qZone;
>> 
>> @Property
>> private String name;
>> void onSuccess() {
>> System.out.println("Success!");
>> if(request.isXHR()) {
>> ajaxRenderer.addRender(sZone).addRender(qZone);
>> }
>> }
>> 
>> --
>> http://www.mreunionlabs.net/ <http://www.mreunion-labs.net/>
>> twitter : @mreunionlabs
>> page : https://plus.google.com/104168782385184990771
>> 
> 
> 
> 
> -- 
> http://www.mreunionlabs.net/ <http://www.mreunion-labs.net/>
> twitter : @mreunionlabs
> page : https://plus.google.com/104168782385184990771


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to