Hi, What action is executed if page is rendering for the 1 time?
May be it's not clear design, but I may say that 2 times call to getter is performance loose. What about conflicts while rendering if bean is not synchronized? I don't think the pattern is more important than normal application behavior. Thanks, Olexandr. -----Original Message----- From: Detlef Bartetzko [mailto:[EMAIL PROTECTED] Sent: Wednesday, December 21, 2005 4:04 PM To: MyFaces Discussion Subject: Re: Tobago SheetRenderer calls getter for list twicely. Hi, in my opinion its not a good idea to create the model with a getter. The getter should only present a reference to the model. The model itself should be created explicitely in an action. This leads to a cleaner design and makes the whole architecture easier to understand. Yours, Pleff Detlef Bartetzko wrote: > Hi, > > Bernd I think Simon just stated a common issue about faces. He was not > talking about the Tobago implementation... hit me if i am wrong. > > Yours, > Pleff > > > Bernd Bohmann wrote: > >> Unfortunaly you don't read my description correctly or the subject. >> >> In the render phase: >> >> SheetRenderer is calling ListDataModel.setRowIndex >> >> ListDataModel.setRowIndex is calling ListDataModel.getRowData >> >> Then SheetRenderer is calling getRowData. >> >> This means a double call for data.get(index) >> >> Maybe data.get(index) is call three times >> but i only analyse the render phase. >> >> Bernd >> >> >> Simon Kitching schrieb: >> >>> Hi, >>> >>> All input components (including tables) call the getter at least twice. >>> >>> They need to call the getter during the validation phase, in order >>> to know whether to generate ValueChanged events. >>> >>> And then they need to call it again at the start of the following >>> render phase, because the value may have changed as a result of the >>> "update model" phase. >>> >>> There's really no way to avoid either of these calls. Possibly >>> MyFaces could add a "noValueChanged" property on every component, >>> and users could set that to true if they don't care about getting >>> ValueChanged events for that component, so the validation step can >>> skip trying to compare the current value against the model. >>> Hmm..maybe the component could look to see if it has any >>> ValueChangeListeners attached, and not try to generate the event in >>> that case? I don't know if that's safe though; there might be other >>> ways to detect that event than a listener (eg an ancestor component >>> which overrides queueEvent). See method UIInput.validate for details. >>> >>> If you are sure that your list will *not* change as a result of the >>> "update model" phase, then you could do this: >>> >>> <code> >>> private transient DataModel myModel; >>> >>> public DataModel getMyModel() { >>> if (myModel == null) { >>> // create the model, including fetching data >>> } >>> return myModel; >>> } >>> </code> >>> >>> This way, you'll create the model during the validation phase (ie >>> when the components are trying to determine whether ValueChanged >>> events are needed or not) and use the same object during the >>> rendering phase. Of course, as described above, that assumes your >>> data won't change as a result of the "update model" phase. >>> >>> Regards, >>> >>> Simon >>> >>> Bernd Bohmann wrote: >>> >>>> Tobago doesn't call getter for the list twice. >>>> >>>> SheetRenderer is calling ListDataModel.setRowIndex >>>> >>>> ListDataModel.setRowIndex is calling ListDataModel.getRowData >>>> >>>> Then SheetRenderer is calling getRowData. >>>> >>>> Maybe we can impove the implementation of ListDataModel. >>>> (I think we should) :-) >>>> >>>> Bernd >>>> >>>> >>>> >>>> >>>> Dennis Byrne schrieb: >>>> >>>>>> I don't think it's a good idea, because writing getter is more >>>>>> logic. >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Are you talking about actions and actionListeners? >>>>> >>>>> Dennis Byrne >>>>> >>>> >>> >>> >> > > -- Dipl.-Inform. Detlef Bartetzko - Executive Officer - Atanion GmbH Software Development - Bismarckstraße 13 - 26122 Oldenburg - Germany phone +49 441 4082300 - mobile +49 174 9749449 - fax +49 441 4082333 mailto:[EMAIL PROTECTED] - http://www.atanion.com

