Re: Ajax, For-Loops and PropertySelections

2006-11-22 Thread Patrick Klein

Hi, once more

Sorry, completely forgot the real problem...

The downstep with the solution we use now is that it is pretty static, 
which would've been avoided using a for loop

It looks like the following:

html-template:
[...]
form jwcid=[EMAIL PROTECTED] async=ognl:true 
updateComponents=ognl:updateComponents

   table
   tr
   thTest/th
   thResult/th
   thTarget/th
   /tr
   div jwcid=dataPosition0/
   div jwcid=dataPosition1/
   /table
/form
[...]

As you can see one has to define each and every data-row statically 
inside the template itself. So you have to know which amount of data 
you're going to visualize.


page-file:
[...]
component id=dataPosition0 type=DataPosition
   binding name=data value=data0/
/component
[...]

Assuming that the component is DataPosition. Each parameter-binding 
needs it's own getter in the page's java-class.
The Component will put together the property selection and store them 
into an abstract setter/getter to access them asynchronously. The 
approach of getting them directly from the building method did not work 
for me. The prepareForRender-method will do the updating.
Additionally one needs to make sure that the components get unique ids 
and that they are wrapped into surrounding divs/tds if needed. As far as 
i tested it out here, @TextField and @Checkbox Components need such a 
wrapper (with it's unique id), for @PropertySelection it is essential 
that there is no wrapper used according to my experience with 
AJAX-Components here.

The html-template of the component could look like this:

tr jwcid=@Any id=ognl:componentId
   td
   div jwcid=@PropertySelection id=ognl:testId 
clientId=ognl:testId model=ognl:testModel value=ognl:data.test/

   /td
   td jwcid=@Any id=ognl:updateResultId
   div jwcid=@PropertySelection id=ognl:resultId 
clientId=ognl:resultId model=ognl:ResultSelectionModel 
value=ognl:data.result/

   /td
   td jwcid=@Any id=ognl:updateTargetId
   div jwcid=@PropertySelection id=ognl:targetId 
clientId=ognl:targetId model=ognl:TargetSelectionModel 
value=ognl:data.target/

   /td
   td jwcid=@Any id=ognl:updateBlockId
   div jwcid=@TextField id=ognl:outputId 
clientId=ognl:outputId value=ognl:data.output/

   /td
/tr

In case of the PropertySelection, e.g. resultId and targetId get 
updated, in order to update  the TextField one needs to update the id 
updateBlockId


In the main class, there need to be a getter for the updateComponents 
property. It needs to contain all DOM-ids you possibly want to update. 
Maybe there one could take a little control by not putting all 
theoretically possible ids in but only the id's which need to be updated 
according to the underlying data. That far i haven't tested the approach 
yet.


One of the EventListeners in the page's java-class could look like that:

@EventListener(elements = { testSelection0, testSelection1 }, events 
= onchange, submitForm = testForm, async = true)

public void adjustResultModelMultiple(BrowserEvent event) {
   String elementId = getCallingElementId(event); // see earlier mail
   System.out.println(adjustResultModelMultiple called for  + 
elementId); // debug purposes

   String targetId = null;
   Data data = null;

   if (elementId.equalsIgnoreCase(testSelection0)) {
   targetId = resultSelection0;
   data = getDataList().get(0);
   } else if (elementId.equalsIgnoreCase(testSelection1)) {
   targetId = resultSelection1;
   data = getDataList().get(1);
   } else {
   return;
   }

   adjustData(data);

   System.out.println(adjustResultModelMultiple: DOM id to update:  + 
targetId); // again debug prupose

   getRequestCycle().getResponseBuilder().updateComponent(targetId);
}

Here the approach is pretty static, too, as one needs to find out the 
data to be altered from the DOM-id causing the event additionally to the 
DOM-Nodes to be updated.


Thats basically the solution i'm using.
Downside is, as mentioned above, the static way. Another problem was 
that in the last tests it didn't work with IE but i guess there's only a 
bit of finetuning needed...


Patrick


Please post your solution to the list.  It makes it much easier for
other folks to find it later.

--sam


On 11/21/06, Patrick Klein [EMAIL PROTECTED] wrote:

Nevermind, found it 2 minutes after hitting the send button :)

Patrick
 Hi!

 I scraped the for-loop in favor of a hardcoded list of components
 which does the trick for our needs here. It would have been nicer the
 way below (and much more flexible) but i could not find a working
 solution for the problem using this approach.
 Now another question came up:
 Using an EventListener with an Array of DOM-elements (e.g.
 @EventListener(elements={tag_1, tag_2, ..., tag_x}, ...)) is
 there a way to find out, for which element the listener was activated?
 I checked BowserEvent and IRequestCycle but found nothing suitable so
 far...

 Patrick
 Hi!

 I'm trying to use Ajax to update the content 

Re: Re: Ajax, For-Loops and PropertySelections

2006-11-21 Thread Sam Gendler

Please post your solution to the list.  It makes it much easier for
other folks to find it later.

--sam


On 11/21/06, Patrick Klein [EMAIL PROTECTED] wrote:

Nevermind, found it 2 minutes after hitting the send button :)

Patrick
 Hi!

 I scraped the for-loop in favor of a hardcoded list of components
 which does the trick for our needs here. It would have been nicer the
 way below (and much more flexible) but i could not find a working
 solution for the problem using this approach.
 Now another question came up:
 Using an EventListener with an Array of DOM-elements (e.g.
 @EventListener(elements={tag_1, tag_2, ..., tag_x}, ...)) is
 there a way to find out, for which element the listener was activated?
 I checked BowserEvent and IRequestCycle but found nothing suitable so
 far...

 Patrick
 Hi!

 I'm trying to use Ajax to update the content of a for-loop containing
 PropertySelections. The template for the table i want to update looks
 like this:

 form jwcid=[EMAIL PROTECTED] async=ognl:true
 updateComponents=ognl:updateComponents
table
 tr
thTest/th
thResult/th
thTarget/th
/tr
tr jwcid=@For element=tr source=ognl:dataList
 value=ognl:data
 1) td jwcid=@PropertySelection id=ognl:data.testId
 model=ognl:testModel value=ognl:data.test/
 2) td jwcid=@PropertySelection id=ognl:data.resultId
 model=ognl:dynamicResultModel value=ognl:data.result/
 3) td jwcid=@PropertySelection id=ognl:data.targetId
 model=ognl:dynamicTargetModel value=ognl:data.target/
td jwcid=@Any id=ognl:data.updateBlockId
div jwcid=@TextField id=ognl:data.outputId
 value=ognl:data.output/
/td
/tr
/table
 /form

 id's are uniquely generated and found correctly inside the generated
 html-code. onchange EventListeners are given for the property
 selections. EventListeners are name so it is clear which element has
 caused the event.
 What i'm trying to accomplish is the following:
 User changes value of selection 1). This activates EventListener
 (async=true). This part actually works... that far. Now the
 PropertyModel of 2) should be changed (note that the table holds more
 then one line).
 Changes on 2) have an impact on the selection in 3), changes in 3)
 manipulate the output-field of the line.

 All this is working perfectly outside the for-loop.

 The problem now is that my selection-model goes amoc if change one of
 the properties a second time (numberFormatException in
 PropertySelection.translateValue(String s), s is actually null).
 Additionally not only the addressed selections get updated (e.g.
 changing the first selection in a line should only have an impact on
 the second and maybe third selection of the same line), but at least
 too other selections. The Browser shows a Property Selection with
 another PropertySelection inside instead of the updated selection.

 The main problem seems to that i need to address the selections to
 update uniquely, but how? The data-iterator is firmly on the last
 value is it is not null already and will be next updated on rewind...

 Can anyone help me out here?

 thnx in advance,
 Patrick

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Ajax, For-Loops and PropertySelections

2006-11-21 Thread Patrick Klein

Nevermind, found it 2 minutes after hitting the send button :)

Patrick

Hi!

I scraped the for-loop in favor of a hardcoded list of components 
which does the trick for our needs here. It would have been nicer the 
way below (and much more flexible) but i could not find a working 
solution for the problem using this approach.

Now another question came up:
Using an EventListener with an Array of DOM-elements (e.g. 
@EventListener(elements={tag_1, tag_2, ..., tag_x}, ...)) is 
there a way to find out, for which element the listener was activated? 
I checked BowserEvent and IRequestCycle but found nothing suitable so 
far...


Patrick

Hi!

I'm trying to use Ajax to update the content of a for-loop containing 
PropertySelections. The template for the table i want to update looks 
like this:


form jwcid=[EMAIL PROTECTED] async=ognl:true 
updateComponents=ognl:updateComponents

   table
tr
   thTest/th
   thResult/th
   thTarget/th
   /tr
   tr jwcid=@For element=tr source=ognl:dataList 
value=ognl:data
1) td jwcid=@PropertySelection id=ognl:data.testId 
model=ognl:testModel value=ognl:data.test/
2) td jwcid=@PropertySelection id=ognl:data.resultId 
model=ognl:dynamicResultModel value=ognl:data.result/
3) td jwcid=@PropertySelection id=ognl:data.targetId 
model=ognl:dynamicTargetModel value=ognl:data.target/

   td jwcid=@Any id=ognl:data.updateBlockId
   div jwcid=@TextField id=ognl:data.outputId 
value=ognl:data.output/

   /td
   /tr
   /table
/form

id's are uniquely generated and found correctly inside the generated 
html-code. onchange EventListeners are given for the property 
selections. EventListeners are name so it is clear which element has 
caused the event.

What i'm trying to accomplish is the following:
User changes value of selection 1). This activates EventListener 
(async=true). This part actually works... that far. Now the 
PropertyModel of 2) should be changed (note that the table holds more 
then one line).
Changes on 2) have an impact on the selection in 3), changes in 3) 
manipulate the output-field of the line.


All this is working perfectly outside the for-loop.

The problem now is that my selection-model goes amoc if change one of 
the properties a second time (numberFormatException in 
PropertySelection.translateValue(String s), s is actually null). 
Additionally not only the addressed selections get updated (e.g. 
changing the first selection in a line should only have an impact on 
the second and maybe third selection of the same line), but at least 
too other selections. The Browser shows a Property Selection with 
another PropertySelection inside instead of the updated selection.


The main problem seems to that i need to address the selections to 
update uniquely, but how? The data-iterator is firmly on the last 
value is it is not null already and will be next updated on rewind...


Can anyone help me out here?

thnx in advance,
Patrick

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]