Sorry for not noticing that. IFIAK you wont be able to use loop variable(value parameter in loop or ajaxforloop) during a non-submission ajax call. In case of a loop, the context of each iteration(i.e the loop variable) is stored in hidden fields in the form. A value-encoder is used to convert the current loop variable into a client side string and on submission the same value-encoder converts it back into the loop variable which is used to set the value of each form field in an iteration. Now if you make an ajax call which only refreshes a zone inside the loop, the current loop value(currentSetting in our case) is null as the decoding using value-encoder does not happen without a submission.
regards Taha On Mon, Jul 11, 2011 at 10:37 PM, Ray Nicholus <[email protected]> wrote: > I'm not sure what variable you are talking about. Do you mean > "currentSetting"? There is no "currentSettings" variable. If so, > currentSetting is the variable set by the ajaxformloop so there is nothing > for me to initialize there. > > On Mon, Jul 11, 2011 at 12:04 PM, Taha Hafeez <[email protected] > >wrote: > > > My first question was where have you initialized currentSettings. Say you > > have initialized it in onPrepare(), then during an ajax call, this method > > is > > not called and so currentSettings is not initialized for that request. If > > you are setting it in setupRender() of the main component, then as only > an > > internal zone is updated, setupRender() or beginRender() of main > > component/page are not called for ajax update of an internal zone. > > > > So you have to be careful about where you setup currentSettings and > whether > > that phase is called during ajax update. In case it is not, then you have > > to > > keep the variable in session so that you can use it across multiple > > requests. > > > > regards > > Taha > > > > > > On Mon, Jul 11, 2011 at 10:17 PM, Ray Nicholus <[email protected]> > > wrote: > > > > > Hello Taha, > > > > > > I guess I'm confused about why I need to worry about any of this. > > Without > > > the zone parameter, I have no problem changing values of my selects. > > > However, I need the zone so that I can change the available options in > > the > > > 2nd select after the value changes in the first select. Shouldn't I > just > > > be > > > able to refresh the 2nd select via a zone update? > > > > > > On Mon, Jul 11, 2011 at 11:26 AM, Taha Hafeez < > [email protected] > > > >wrote: > > > > > > > Hi Ray, > > > > > > > > Where are you initializing currentSetting.fileMetadataTyp?e and is > this > > > > value @Persisted as you are using it across multiple requests. > > > > > > > > regards > > > > Taha > > > > > > > > On Mon, Jul 11, 2011 at 9:19 PM, Ray Nicholus <[email protected]> > > > wrote: > > > > > > > > > Here is a fragment of some template code inside of a tapestry form: > > > > > > > > > > <t:ajaxformloop t:id="existingAutoImportSettings" > > > > source="existingSettings" > > > > > value="currentSetting"> > > > > > <t:label for="typeSelect"/> > > > > > <t:select t:id="typeSelect" zone="fileMetadataSelectZone" > > > > > value="currentSetting.fileMetadataType" label="${message:type}"/> > > > > > > > > > > <t:zone t:id="fileMetadataSelectZone"> > > > > > <t:label for="fileMetadataSelect"/> > > > > > <t:select t:id="fileMetadataSelect" > > > > > value="currentSetting.fileMetadataObject" > > > > > model="autoImportFileMetadataModel" > > label="${message:file-metadata}"/> > > > > > </t:zone> > > > > > > > > > > .......... > > > > > > > > > > </t:ajaxformloop> > > > > > > > > > > <input type="submit" value="Update"/> > > > > > > > > > > > > > > > As soon as I add the zone parameter to the 1st select & reload, I > get > > a > > > > NPE > > > > > when I attempt to change the value in the 1st select. It claims > that > > > the > > > > > currentSetting value is null when attempting to evaluate > > > > > currentSetting.fileMetadataType. > > > > > > > > > > What am I doing wrong? > > > > > > > > > > > > > > >
