[ 
https://issues.apache.org/jira/browse/MYFACES-2585?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12841224#action_12841224
 ] 

Werner Punz edited comment on MYFACES-2585 at 3/4/10 1:25 PM:
--------------------------------------------------------------

Ok I raised this one to critical because it is almost a showstopper but 
basically again caused by the spec as far as I can see it.

Ok this is a huge problem, but not on the javascript side, the problem lies in 
the way JSF handles the update part
The example maps roughly to following return string

<?xml version="1.0" encoding="utf-8"?><partial-response><changes><update 
id="myForm:myText"><![CDATA[<span id="myForm:myText"><input 
id="myForm:j_id2076757786_7bc8cfb1" name="myForm:j_id2076757786_7bc8cfb1" 
type="text" value="aaaaa" />
 <script type="text/javascript"><!--

 //<![CDATA[
 alert("hello");
 //]]>

//--></script></span>]]></update><update 
id="javax.faces.ViewState"><![CDATA[wAKfV4bepmBnyfeFWNCSN/IhViyGgobTvdAEvn4nKBrg3X2hhH9sIxBOFwn10jm/kEIjlw3aaS7jiAxqIC4TXvmOedIbj9MG]]></update></changes></partial-response>


What we have here is a major problem on the protocol level which I cannot even 
remotely fix on the javascript side alone.

the issue we face here is simply a CDATA block within a CDATA block which the 
xhr object refuses to process due to not being a proper XML!

The problem lies clearly in the protocol, which states that the data in the 
<update> must be passed upwards to the xhr response processing as CDATA block 
(I have to double check the spec but thats as far as I recall that part.

Now this interferes with the fact that facelets expects
//<![CDATA[
//]]>
within the body of the script tag to avoid semantic javascript parsing for 
constructs like alert("<script type... />");

Ok here would be my solution, but I have to double check if we are in sync with 
the spec.
Our main goal in the javascripts was to be server compatible to mojarra
(which probably has the same problem)
So plain text processing like it is done here must be done for normal cases.

But since our PPR ResponseWriter has to double buffer anyway for insert, update 
etc... we could do a double check for CDATA blocks in the generated html on the 
response writer side and then simply BASE64 encode the entire <update> <insert> 
content, and put a prefix marker in front of it.

the javascript while processing the single tags can do a quick check for the 
marker at the beginning of the response string and then if present base64 
unencode the entire string for further processing.

That way we would not loose server compatibility to Mojarra and still probably 
would be in the spec.
(But as I said take it with a grain of salt I have to recheck the spec here)








      was (Author: werpu):
    Ok this is a huge problem, but not on the javascript side, the problem lies 
in the way JSF handles the update part
The example maps roughly to following return string

<?xml version="1.0" encoding="utf-8"?><partial-response><changes><update 
id="myForm:myText"><![CDATA[<span id="myForm:myText"><input 
id="myForm:j_id2076757786_7bc8cfb1" name="myForm:j_id2076757786_7bc8cfb1" 
type="text" value="aaaaa" />
 <script type="text/javascript"><!--

 //<![CDATA[
 alert("hello");
 //]]>

//--></script></span>]]></update><update 
id="javax.faces.ViewState"><![CDATA[wAKfV4bepmBnyfeFWNCSN/IhViyGgobTvdAEvn4nKBrg3X2hhH9sIxBOFwn10jm/kEIjlw3aaS7jiAxqIC4TXvmOedIbj9MG]]></update></changes></partial-response>

As you can see the problem is in the syntax itself since the spec states that 
the update block must be a CDATA block, but now we have a cdata within a CDATA 
block which is a huge problem, we either can fix it on the facelets side, or on 
the responsewriter side. Another option probably would be a script component 
which filters the CDATA out...


  
> ajax doesn't work if target contains script with CDATA
> ------------------------------------------------------
>
>                 Key: MYFACES-2585
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2585
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-2
>         Environment: Javascript, API, IMPL...
>            Reporter: Ganesh Jung
>            Priority: Critical
>
> This doesn't work:
>               <h:inputText value="#{numberBean.myNumber}">
>                               <f:ajax render="test" />
>               </h:inputText>
>               <h:panelGroup id="test">
>                           <script type="text/javascript">
>                               //<![CDATA[
>                                       alert("running");
>                                       //]]>
>                               </script>
>                       <h:inputText value="#{numberBean.myNumber}" />
>               </h:panelGroup>
> But this works fine:
>               <h:inputText value="#{numberBean.myNumber}">
>                               <f:ajax render="test" />
>               </h:inputText>
>               <h:panelGroup id="test">
>                           <script type="text/javascript">
>                                       alert("running");
>                               </script>
>                       <h:inputText value="#{numberBean.myNumber}" />
>               </h:panelGroup>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to