Hi Josh! Thank you very much!!! This is great. Now it works!
I'm not sure if this is last issue on my way, but this current issue is solved. Thank you again. p.s. I'm sorry for badly written question. I will try harder to write good questions, which will save community time. 2010/8/12 Josh Canfield <joshcanfi...@gmail.com>: > Hi Karpushin Sergey. > >> <t:if test="${editingActivity}"> > Don't use ${} notation within bound parameters. This can cause > problems in other situations (casts the value to a string). > >> The first problem is that tapestry cant automatically restore state >> of ActivityJournalItem component. When I receive event onSuccess for >> the form - fields of custom types are null. > > What you put in your form elements is significant so you need to show > at least one of the fields that are set to null. If you use accessors > like value="activity.name" then you are telling tapestry to use a > property conduit and it will try to set that value when the form is > submitted. If you are using value="${activity.name}" then you are > passing a string to Tapestry and it will not try to update it during > submit. > >> The second problem and I can't find out how to solve it - tapestry >> rerenders always first component instance ActivityJournalItem. > > As was previously mentioned you are binding to a single zone id > "activityAjaxZone" which exists only once on the page for the first > item rendered with that component id. You need each of your forms and > zones to use a specific unique zoneId. The zone ids generated need to > be unique to the page so you don't update the wrong zone. You can > figure out a naming scheme. > > Here is a simple example: > > <t:loop t:source="1..5" t:index="loopIndex"> > <!-- the zone's t:id is used to identify the single instance of the > component that lives within the page so that we can return it's body > during the update event handler --> > <t:zone t:id="notUsedForDOMId" id="myPageUniqueZoneIdPrefix_${loopIndex}"> > Hello! Click > <t:eventlink event="update" > zone="myPageUniqueZoneIdPrefix_${loopIndex}">${now}</t:eventlink> > </t:zone> > </t:loop> > > // support class property/methods > > �...@property > private int _loopIndex; > > public Block onUpdate() { > return ((Zone) > _resources.getEmbeddedComponent("notUsedForDOMId")).getBody(); > } > > public String getNow() { > return new Date().toString(); > } > > Please consider that when you submit questions you need to break the > problem down to the simplest elements. When you cut and paste > incomplete or large portions of code with extraneous elements then it > generates extra work for those who would like to help. I think you'll > find that if you spend the time to simplify the problem you'll not > only have a higher chance of solving it yourself (things jump out when > you remove all the cruft) but you'll also get better help from > whatever community you are asking for help. > > Here is your code broken down into the bare essentials, same problems > but much more approachable for a fresh set of eyes: > > <div t:type="Loop" t:source="journalDays" t:value="journalDay"> > <t:zone t:id="dayAjaxZone" update="show"> > <div t:type="Loop" t:source="activities" t:value="activity"> > <t:zone t:id="activityAjaxZone" update="show"> > <div> > <form t:type="form" t:id="activityForm" > t:zone="activityAjaxZone"> > <!-- Fields omitted for brevity (but since > they are part of your problem should probably have been included--> > <input t:id="Save" t:type="Submit" value="Save"/> > <input t:id="Cancel" t:type="Submit" value="Cancel"/> > </form> > </div> > </t:zone> > </div> > </t:zone> > </div> > > > Good luck! > > Josh > > On Tue, Aug 10, 2010 at 2:07 PM, Tornn <sergey.v.karpus...@gmail.com> wrote: >> Hi All! You are my last hope. I tried to resolve it by myself, I asked >> (http://tinyurl.com/2btkmzk) at stackoverflow.com but with no success >> yet. >> >> A little background. I'm very interested in tapestry (and currently >> considering using it in production) because it looks like very >> efficient (in all senses) framework. And it looks like >> component-oriented framework. So I'm trying to work with it in a >> component way. >> >> I'll try to fully describe problem. >> >> I have page with loop of components, where every component have its >> own loop and other component in it. Inner component has form in it. >> Every component is enclosed in zone, because we want responsive UI and >> going to refresh only some portions of the page. >> Within page I have following code: >> <div t:type="Loop" t:source="journalDays" t:value="journalDay"> >> <t:DayJournalItem day="journalDay" cacheContainer="cacheContainer" /> >> </div> >> >> By the way, page activated in some context (conversation-id). >> >> Component DayJournalItem has following code: >> <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> >> <t:zone t:id="dayAjaxZone" update="show"> >> <div class="dayHeader">${dayHeader}</div> >> <div class="dayBody"> >> <div t:type="Loop" t:source="activities" t:value="activity"> >> <t:ActivityJournalItem activity="activity" >> cacheContainer="cacheContainer" /> >> </div> >> </div> >> </t:zone> >> </div> >> >> And component ActivityJournalItem has this code (I wiped out form >> fields and markup, as it's not important now. I think): >> <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> >> <t:zone t:id="activityAjaxZone" update="show"> >> <t:if test="${editingActivity}"> >> <div class="activityEditFormBody"> >> <form t:type="form" t:id="activityForm" t:zone="activityAjaxZone"> >> .... >> <input t:id="Save" t:type="Submit" value="Save" /> >> <input t:id="Cancel" t:type="Submit" value="Cancel" /> >> </form> >> </div> >> </t:if> >> <t:if test="${!editingActivity}"> >> <div>viewing activity: ${activity.id}</div> >> </t:if> >> </t:zone></div> >> >> The first problem is that tapestry cant automatically restore state >> of ActivityJournalItem component. When I receive event onSuccess for >> the form - fields of custom types are null. I solved this problem with >> pretty dirty work-around (I'm passing token with t:context and >> restoring state from custom cache object. I'm receiving token with >> onSuccess(String token)). So this problem can be considered solved, >> but i think that there may be some better solution. More native for >> tapestry. Like t:encoder when we using loop inside forms.) >> >> The second problem and I can't find out how to solve it - tapestry >> rerenders always first component instance ActivityJournalItem. If with >> loop we rendered 3 times, not depending what button was pressed always >> exactly first zone is rerendered. Screenshoot: >> http://my.jetscreenshot.com/2672/20100808-thdx-190kb.jpg >> >> So my question is: How to solve second problem and maybe there is >> better solution for the first problem. >> >> I have a very little understanding on how tapestry internally works, >> and I think there is something wrong with ids. Every zone in rendered >> html has its own unique ID, but I cant see it when injecting zone with >> "@Component Zone activityAjaxZone;". The clientId is null - maybe this >> is the problem. And if I specify not only t:id but also id like >> 'id="activityAjaxZone${someCustomToken}" ' it will result in other >> problem - buttons do nothing - I can press it all day but no errors, >> no actions - nothing. >> I tried to debug, but there are many code injected in my class at >> real-time, so I can't debug it. >> >> p.s. By the way - my test project is open-source and you can look at >> full source code at google code: >> http://code.google.com/p/tasks-journal/source/checkout >> >> -- >> Best regards, >> Karpushin Sergey. >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > > > > -- > -- > http://www.bodylabgym.com - a private, by appointment only, one-on-one > health and fitness facility. > -- > http://www.ectransition.com - Quality Electronic Cigarettes at a > reasonable price! > -- > TheDailyTube.com. Sign up and get the best new videos on the internet > delivered fresh to your inbox. > > --------------------------------------------------------------------- > 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