Hi,

I agree with Ganesh and Alexander. 

All components in PrimeFaces have an enclosing container element (span or div) 
with a proper client id assigned as well.

Regards,

Cagatay

On Apr 7, 2010, at 11:28 AM, Ganesh wrote:

> Hi,
> 
> I agree with Alexander. The component you posted is not well designed. As 
> Alexander pointed out: What would getClientId() return for this component? I 
> also agree with Alexanders solution: enclose the components reposne with a 
> div that carries a proper clientId.
> 
> It's an obvious characteristic of JSF AJAX to require having one HMTL element 
> corresponding with one JSF component to be able to replace it via AJAX. 
> Trying to craft a sophisticated solution for the cornercase of a badly 
> designed component leads to a highly complicated specification enhancement 
> that only makes sense to very few experts.
> 
> Best regards,
> Ganesh
> 
> Martin Marinschek schrieb:
>> Hi Werner,
>> no. Don't follow any broken approach - emit an error saying that this
>> is not possible. Then the component author will know. Mojarra should
>> do the same.
>> I agree that the API should be more open than. Can we expose this API
>> unilaterally at least in MyFaces?
>> best regards,
>> Martin
>> On 4/7/10, Werner Punz <werner.p...@gmail.com> wrote:
>>> The problem here is either behavior is wrong (not sure which is wronger), in
>>> the end the only real fix is to expose the full partialresponse writer API
>>> to the component author to give him full access on how his subpart on the
>>> page gets updated.
>>> 
>>> This road currently is blocked simply by enforcing an open update tag on the
>>> components from the rendering lifecycle!
>>> 
>>> The workaround is to make the component authors aware that for the PPR case
>>> within a component they always should make a root node which has the
>>> identifier of ClientId and embed their own rendering into this root node
>>> (div, span, whatever)
>>> 
>>> So if I follow a broken approach I personally prefer to use the one which is
>>> consistent over all two implementations.
>>> 
>>> In the end the only fix I know which makes sense to this problem is to add a
>>> marker interface to the spec
>>> something like PPRAware and a separate component renderer method, renderPPR
>>> and then adding placeholders for the component while the update tag is open,
>>> defer the rendering of the PPRAware component to the stage when update is
>>> closed
>>> and then render those deferred components by giving them control over the
>>> update, insert etc... possibilities wie theoretically have in the API and
>>> practically can only use outside of the render cycle :-(
>>> 
>>> 
>>> 
>>> 
>>> On Wed, Apr 7, 2010 at 9:26 AM, Martin Marinschek
>>> <mmarinsc...@apache.org>wrote:
>>> 
>>>> Hi guys,
>>>> 
>>>> is it really useful to follow Mojarra's behaviour here? I think it
>>>> might be a little better to have a wandering div (and see that
>>>> something is wrong) than just ignoring the second div and with this
>>>> let the developer in the believe that everything is alright, which it
>>>> really isn't.
>>>> 
>>>> best regards,
>>>> 
>>>> Martin
>>>> 
>>>> On 4/7/10, Werner Punz <werner.p...@gmail.com> wrote:
>>>>> Yes that is what I was basically posting as workaround to the issue I
>>>> got,
>>>>> nevertheless I now coded Mojarras behavior into MyFaces, just to be
>>>>> consistent here.
>>>>> (With the exception that I also fixed it on the IE side as Mojarra
>>>> behaves
>>>>> for
>>>>> more compliant  browsers to have the same behavior over all browsers)
>>>>> 
>>>>> I do not expect any component author really doing it differently than
>>>>> you
>>>>> said, Alex, but in the end to really resolve the problem we probably
>>>>> have
>>>> to
>>>>> resolve the enforced update issue in the long run so that the
>>>>> PartialResponseWriter API can be used in its full extent and glory by
>>>>> the
>>>>> component authors instead of being shoehorned into an already open
>>>>> update
>>>>> tag!
>>>>> 
>>>>> Werner
>>>>> 
>>>>> 
>>>>> On Wed, Apr 7, 2010 at 12:05 AM, Alexander Smirnov
>>>>> <asmir...@exadel.com>wrote:
>>>>> 
>>>>>> You have to keep in mind that JSF Ajax updates component content, not
>>>>>> the Html elements. Therefore, any component have to has enclosing Html
>>>>>> element ( <div> , <span> whatever else ) with id attribute generated as
>>>>>> the component clientId to be compatible with Ajax. In your case, you
>>>>>> have to create placeholder element ( probably <div> ) that encapsulates
>>>>>> both of your elements.
>>>>>> 
>>>>>> On 04/06/2010 09:42 AM, Werner Punz wrote:
>>>>>>> Hello everyone, I ran into an issue regarding the update, which is
>>>>>>> closely related to a behavior jsf2 exposes regarding component
>>>> rendering
>>>>>>> in the update cycle.
>>>>>>> 
>>>>>>> The main issue is following: If we have a component which we trigger
>>>>>>> with following code:
>>>>>>> 
>>>>>>> <myComp:javascriptTestComponent
>>>>>>> id="myTestComponent"></grv:javascriptTestComponent>
>>>>>>>                <a href="#" name="mego3"
>>>>>>> 
>>>>>>> onclick="jsf.ajax.request(this,event,{execute:'myTestComponent',
>>>>>>> render:'myTestComponent'}); return false;">submit
>>>>>>>                    me</a>
>>>>>>> 
>>>>>>> and the component itself renders following in its renderer:
>>>>>>> 
>>>>>>>        ResponseWriter writer = context.getResponseWriter();
>>>>>>>        writer.startElement(DIV, component);
>>>>>>>        writer.writeAttribute(ID,component.getClientId(context), null
>>>> );
>>>>>>>        writer.write("hello world"+Math.random());
>>>>>>>        writer.endElement(DIV);
>>>>>>> 
>>>>>>>        writer = context.getResponseWriter();
>>>>>>>        writer.startElement(DIV, component);
>>>>>>> 
>>>>>>> writer.writeAttribute(ID,component.getClientId(context)+":_second",
>>>> null
>>>>>> );
>>>>>>>        writer.write("hello world"+Math.random());
>>>>>>>        writer.endElement(DIV);
>>>>>>> 
>>>>>>> 
>>>>>>> the resulting ppr response now looks like following:
>>>>>>> 
>>>>>>> |<update id="myTestComponent">
>>>>>>> 
>>>>>>> <![CDATA||[<div id="myTestComponent">hello
>>>> world0.8619488403376933</div>
>>>>>>> <div id="myTestComponent:_second">hello||
>>>>>> world0.25176272071402683</div>]]>
>>>>>>> </update>...|
>>>>>>> 
>>>>>>> Now the problem is, since the update part of the response is already
>>>>>>> opened the component author cannot really influence the response
>>>>>>> rendering in any meaningful way (the correct solution would be to
>>>> issue
>>>>>>> two update commands here)
>>>>>>> Now the javascript has to react on the client side to resolve that
>>>>>>> situation.
>>>>>>> 
>>>>>>> Now MyFaces just replaced the original
>>>>>>> 
>>>>>>> |myTestComponent|
>>>>>>> 
>>>>>>> with the update code and hence the result was a div wandering down
>>>> (aka
>>>>>>> wrong update)
>>>>>>> 
>>>>>>> hello world0.48748236239247755
>>>>>>> hello world0.6020541783857698
>>>>>>> hello world0.7181842402648805
>>>>>>> hello world0.2803064696069696
>>>>>>> (after a handful of requests, with the lowest line being the first
>>>>>>> second div being dran)
>>>>>>> 
>>>>>>> now due to being incorrect a user gave me rightfully a bug issue. I
>>>> dug
>>>>>>> deeper and ran the same example
>>>>>>> against Mojarra, now Mojarra does cherry pick the delivered first div
>>>>>>> and replaces the original div, and omits the second one.
>>>>>>> The Problem is Mojarra just does it for newer browsers, it does the
>>>> same
>>>>>>> just updating the  original element with the replacement code
>>>>>>> (and hence producing a wandering div) for IE6+7-
>>>>>>> 
>>>>>>> My question is, first, how to handle that problem correctly.
>>>>>>> Secondly,
>>>>>>> is this even a problem for us or more one for the component author?
>>>>>>> In the end the main problem would not exist if they ajax api could be
>>>>>>> used on the component side properly without being enforced already
>>>> into
>>>>>>> an update (or to allow nested updates, inserts within an update)
>>>>>>> 
>>>>>>> 
>>>>>>> Werner
>>>>>>> 
>>>> 
>>>> --
>>>> 
>>>> http://www.irian.at
>>>> 
>>>> Your JSF powerhouse -
>>>> JSF Consulting, Development and
>>>> Courses in English and German
>>>> 
>>>> Professional Support for Apache MyFaces
>>>> 
> 
> -- 
> "There are two kinds of people in the world, those who believe there are two 
> kinds of people and those who don't."
> — Robert Benchley

Reply via email to