myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Werner Punz (JIRA)" <...@myfaces.apache.org>
Subject [jira] Commented: (MYFACES-2640) (JSF.js) Ajax Render component problem, replace with whole fragment not one element.
Date Fri, 30 Apr 2010 07:23:57 GMT

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

Werner Punz commented on MYFACES-2640:
--------------------------------------

Hello Mark thanks for all your code and suggestions one by one

Ok first to the fuzzy elements

Myfaces can only support what the spec gives and what the spec clearly not breaks, eg. Extensions
are possible but not totally different behavior.
A fuzzy element execute or render on javascript level is a definitive no go.
But for such cases you can use libraries like jquery or dojo query which support things like
that

I will give you some pseudo code (dojo query, since I am more familiar with that one):
var executeList = dojo.query("#*myId");
var identifiers = [];
for(var cnt = 0; cnt <executeList.length; cnt++  {
   identifiers.push(executeList[cnt])
}
return executeList.join(" ");



This is pseudo code, I am not sure if I got the query right, but you get the idea,
as I said for the request and response object I am bound to the spec, I cannot extend 
it for fuzzy elements within execute and render on the official api level.

I also cannot recommend to rely on specifics within myfaces, you will definitely break compatibiltiy
to Mojarra.

As for your reported bugs, I will check them one by one, and comment or merge them in case
by case, I will do that after the weekend, probably moday or tuesday.







> (JSF.js) Ajax Render component problem, replace with whole fragment not one element.
> ------------------------------------------------------------------------------------
>
>                 Key: MYFACES-2640
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2640
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-3
>         Environment: tomcat 6.0.20 java (mac os x )
>            Reporter: Mark Li
>   Original Estimate: 4h
>  Remaining Estimate: 4h
>
> after ajax submit, jsf.js will re-render some element depending on jsf.ajax.request({render:"
some elements "});
> but this js code will cause some problem.
> jsf.js:
> myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, itemIdToReplace,
newTag, form) {
> ......
>                     var fragment = range.createContextualFragment(newTag);
>                     evalNode = item.parentNode.replaceChild(fragment, item)
> .....
> }
> sometime fragment will has more than one childNodes, or the childNode not has clientId,
but the childNode of childNode has clientId.
> this will cause html unstable.
> Please fix it.
> this is my suggestion:
> myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, itemIdToReplace,
newTag, form) {
>            .............
>               Orginal:
>                     var fragment = range.createContextualFragment(newTag);
>                     evalNode = item.parentNode.replaceChild(fragment, item)
>               fix:
>                     var fragment = range.createContextualFragment(newTag);
>                     var replaceItem = myfaces._impl._util._Utils.findHtmlItemFromFragment(fragment,
itemIdToReplace);
>                     if(replaceItem == null)replaceItem = fragment;
>                     evalNode = item.parentNode.replaceChild(replaceItem, item)
>        ..................
> }
>     myfaces._impl._util._Utils.findHtmlItemFromFragment = function(fragment, itemId){
>     	if(fragment.childNodes == null)
>     		return null;
>     	for(var i = 0; i < fragment.childNodes.length ; i++ ){
>     		var c = fragment.childNodes[i];
>     		if(c.id == itemId)
>     			return c;
>     	}
>     	for(var i = 0; i < fragment.childNodes.length ; i++ ){
>     		var c = fragment.childNodes[i];
>     		var item = myfaces._impl._util._Utils.findHtmlItemFromFragment(c, itemId);
>     		if(item != null)
>     			return item;
>     	}
>     	return null;
>     };

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


Mime
View raw message