- 
        1. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 3, 2007 11:38 AM (in response to huangbo)I tried to use <a4j:support id="s1" event="onclick" reRender="rep"/> in my custom jsf component, and the generated HTML is: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>repeater</title> <script type='text/javascript' src='/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf'></script></head> <body> <form id="_id0" method="post" action="/ajax4jsf/index.jsf" enctype="application/x-www-form-urlencoded"> <input type="radio" name="_id0:r1" value="radio3" onclick="A4J.AJAX.Submit('_viewRoot','_id0',event,{'parameters':{'_id0:s1':'_id0:s1'},'actionUrl':'/ajax4jsf/index.jsf'})"> radio3</input> <input type="radio" name="_id0:r1" value="radio4" onclick="A4J.AJAX.Submit('_viewRoot','_id0',event,{'parameters':{'_id0:s1':'_id0:s1'},'actionUrl':'/ajax4jsf/index.jsf'})"> radio4</input> <span id="_id0:rep"></span> <input type="hidden" name="_id0" value="_id0" /></form> </body> </html>
 But when I click the radio buttons, nothing happens, it's expected the value of the clicked radio will be shown in the span. If I use standard <h:selectOneRadio> tag, everything works fine, and the generated HTML is:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>repeater</title> <script type='text/javascript' src='/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf'></script></head> <body> <form id="_id0" method="post" action="/ajax4jsf/index.jsf" enctype="application/x-www-form-urlencoded"> <table id="_id0:r1"> <tr> <td><label> <input type="radio" name="_id0:r1" value="radio3" onclick="A4J.AJAX.Submit('_viewRoot','_id0',event,{'parameters':{'_id0:s1':'_id0:s1'},'actionUrl':'/ajax4jsf/index.jsf'})"> radio3</input></label></td> <td><label> <input type="radio" name="_id0:r1" value="radio4" onclick="A4J.AJAX.Submit('_viewRoot','_id0',event,{'parameters':{'_id0:s1':'_id0:s1'},'actionUrl':'/ajax4jsf/index.jsf'})"> radio4</input></label></td> </tr> </table> <span id="_id0:rep"></span> <input type="hidden" name="_id0" value="_id0" /></form> </body> </html>
 Could any one tell me why this would happen? The generated HTML seem really similar. Does ajax4jsf not support custom jsf components?
- 
        2. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 3:46 AM (in response to huangbo)post the original jsp (or xhtml) code, but not what it is generated into. 
 In general, ajax4jsf is designed for working with custom components. Using CDK for creating components is not required to use along with a4j:support
- 
        3. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 4, 2007 4:01 AM (in response to huangbo)the jsp using custom tag: <%@ page language="java"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://mydomain.com/jsf" prefix="my"%> <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>repeater</title> </head> <body> <f:view> <h:form> <my:selectOneRadio id="r1" value="#{bean.text}"> <f:selectItem itemLabel="radio3" itemValue="radio3" /> <f:selectItem itemLabel="radio4" itemValue="radio4" /> <a4j:support id="s1" event="onclick" reRender="rep"/> </my:selectOneRadio> <h:outputText value="#{bean.text}" id="rep" /> </h:form> </f:view> </body> </html>
 the jsp using standard tag:<%@ page language="java"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>repeater</title> </head> <body> <f:view> <h:form> <h:selectOneRadio id="r1" value="#{bean.text}"> <f:selectItem itemLabel="radio1" itemValue="radio1" /> <f:selectItem itemLabel="radio2" itemValue="radio2" /> <a4j:support id="s1" event="onclick" reRender="rep"/> </h:selectOneRadio> <h:outputText value="#{bean.text}" id="rep" /> </h:form> </f:view> </body> </html>
 The standard one works but my custom one doesn't. It's really weird.
- 
        4. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 4:32 AM (in response to huangbo)I have two guesses - conversion problem and event missing. 
 Add somewhere on the page inside the f:view :<a4j:outputPanel ajaxRendered="true"> <h:messages> </a4j:outputPanel> 
 and see does the message appear there then you click.
 If not, add:<a4j:log hotkey="M" /> 
 press ctrl-Shift-M for popup debug window. then click the radio. Does the debug window show something?
- 
        5. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 4, 2007 5:26 AM (in response to huangbo)yes, the debug window shows the following information: 
 debug[17:25:33,046]: Have Event [object Object] with properties: target: undefined, srcElement: [object], type: click
 debug[17:25:33,046]: NEW AJAX REQUEST !!! with form :_id3
 debug[17:25:33,062]: parameter _id3:s1 with value _id3:s1
 debug[17:25:33,078]: Start XmlHttpRequest
 debug[17:25:33,078]: Reqest state : 1
 debug[17:25:33,093]: QueryString: AJAXREQUEST=_viewRoot&_id3%3Ar1=radio4&_id3=_id3&_id3%3As1=_id3%3As1&
 debug[17:25:33,140]: Reqest state : 2
 debug[17:25:33,140]: Reqest state : 3
 debug[17:25:33,156]: Reqest state : 4
 debug[17:25:33,171]: Reqest end with state 4
 debug[17:25:33,171]: Response with content-type: text/xml;charset=UTF-8
 debug[17:25:33,187]: Full response content: <?xml version="1.0"?>
 repeater
 debug[17:25:33,187]: Update page by list of rendered areas from response _id0,_id3:rep
 debug[17:25:33,203]: search for elements by name 'script' in element #document
 debug[17:25:33,203]: selectNodes found 1
 debug[17:25:33,218]: in response with src=/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf
 debug[17:25:33,218]: Such element exist in document
 debug[17:25:33,234]: search for elements by name 'link' in element #document
 debug[17:25:33,234]: selectNodes found 0
 debug[17:25:33,250]: Attempt to update part of page for Id: _id0
 debug[17:25:33,265]: call selectSingleNode for id= _id0
 debug[17:25:33,265]: Replace content of node by outerHTML()
 debug[17:25:33,281]: search for elements by name 'script' in element span
 debug[17:25:33,281]: selectNodes found 0
 debug[17:25:33,296]: Scripts in updated part count : 0
 debug[17:25:33,296]: Update part of page for Id: _id0 successful
 debug[17:25:33,296]: Attempt to update part of page for Id: _id3:rep
 debug[17:25:33,296]: call selectSingleNode for id= _id3:rep
 debug[17:25:33,312]: Replace content of node by outerHTML()
 debug[17:25:33,312]: search for elements by name 'script' in element span
 debug[17:25:33,312]: selectNodes found 0
 debug[17:25:33,312]: Scripts in updated part count : 0
 debug[17:25:33,312]: Update part of page for Id: _id3:rep successful
 debug[17:25:33,312]: call selectSingleNode for id= ajax-update-ids
 debug[17:25:33,328]: Hidden JSF state fields:
 debug[17:25:33,328]: search for elements by name 'input' in element span
 debug[17:25:33,328]: selectNodes found 1
 debug[17:25:33,328]: Replace value for inputs: 3 by new values: 1
 debug[17:25:33,328]: Input in response: jsf_sequence
 debug[17:25:33,343]: search for elements by name 'INPUT' in element span
 debug[17:25:33,343]: selectNodes found 0
 debug[17:25:33,343]: Replace value for inputs: 3 by new values: 0
 But I don't understand what's wrong.
- 
        6. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 4, 2007 5:30 AM (in response to huangbo)yes, the debug window shows the following information: debug[17:25:33,046]: Have Event [object Object] with properties: target: undefined, srcElement: [object], type: click debug[17:25:33,046]: NEW AJAX REQUEST !!! with form :_id3 debug[17:25:33,062]: parameter _id3:s1 with value _id3:s1 debug[17:25:33,078]: Start XmlHttpRequest debug[17:25:33,078]: Reqest state : 1 debug[17:25:33,093]: QueryString: AJAXREQUEST=_viewRoot&_id3%3Ar1=radio4&_id3=_id3&_id3%3As1=_id3%3As1& debug[17:25:33,140]: Reqest state : 2 debug[17:25:33,140]: Reqest state : 3 debug[17:25:33,156]: Reqest state : 4 debug[17:25:33,171]: Reqest end with state 4 debug[17:25:33,171]: Response with content-type: text/xml;charset=UTF-8 debug[17:25:33,187]: Full response content: <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>repeater</title><script type="text/javascript" src="/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf"> </script></head><body><span id="_id0"></span><span id="_id3:rep"></span><meta name="Ajax-Update-Ids" content="_id0,_id3:rep" /><span id="ajax-update-ids"><input type="hidden" name="jsf_sequence" value="1" /></span><meta id="Ajax-Response" name="Ajax-Response" content="true" /></body></html> debug[17:25:33,187]: Update page by list of rendered areas from response _id0,_id3:rep debug[17:25:33,203]: search for elements by name 'script' in element #document debug[17:25:33,203]: selectNodes found 1 debug[17:25:33,218]: <script> in response with src=/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf debug[17:25:33,218]: Such element exist in document debug[17:25:33,234]: search for elements by name 'link' in element #document debug[17:25:33,234]: selectNodes found 0 debug[17:25:33,250]: Attempt to update part of page for Id: _id0 debug[17:25:33,265]: call selectSingleNode for id= _id0 debug[17:25:33,265]: Replace content of node by outerHTML() debug[17:25:33,281]: search for elements by name 'script' in element span debug[17:25:33,281]: selectNodes found 0 debug[17:25:33,296]: Scripts in updated part count : 0 debug[17:25:33,296]: Update part of page for Id: _id0 successful debug[17:25:33,296]: Attempt to update part of page for Id: _id3:rep debug[17:25:33,296]: call selectSingleNode for id= _id3:rep debug[17:25:33,312]: Replace content of node by outerHTML() debug[17:25:33,312]: search for elements by name 'script' in element span debug[17:25:33,312]: selectNodes found 0 debug[17:25:33,312]: Scripts in updated part count : 0 debug[17:25:33,312]: Update part of page for Id: _id3:rep successful debug[17:25:33,312]: call selectSingleNode for id= ajax-update-ids debug[17:25:33,328]: Hidden JSF state fields: debug[17:25:33,328]: search for elements by name 'input' in element span debug[17:25:33,328]: selectNodes found 1 debug[17:25:33,328]: Replace value for inputs: 3 by new values: 1 debug[17:25:33,328]: Input in response: jsf_sequence debug[17:25:33,343]: search for elements by name 'INPUT' in element span debug[17:25:33,343]: selectNodes found 0 debug[17:25:33,343]: Replace value for inputs: 3 by new values: 0 
 But I don't understand what's wrong.
- 
        7. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 4, 2007 5:46 AM (in response to huangbo)and here is the debug information for the working jsp: debug[17:34:44,953]: Have Event [object Object] with properties: target: undefined, srcElement: [object], type: click debug[17:34:44,968]: NEW AJAX REQUEST !!! with form :_id3 debug[17:34:44,968]: parameter _id3:s1 with value _id3:s1 debug[17:34:44,984]: Start XmlHttpRequest debug[17:34:44,984]: Reqest state : 1 debug[17:34:45,000]: QueryString: AJAXREQUEST=_viewRoot&_id3%3Ar1=radio1&_id3=_id3&_id3%3As1=_id3%3As1& debug[17:34:45,062]: Reqest state : 2 debug[17:34:45,078]: Reqest state : 3 debug[17:34:45,093]: Reqest state : 4 debug[17:34:45,093]: Reqest end with state 4 debug[17:34:45,109]: Response with content-type: text/xml;charset=UTF-8 debug[17:34:45,109]: Full response content: <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>repeater</title><script type="text/javascript" src="/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf"> </script></head><body><span id="_id0"></span><span id="_id3:rep">radio1</span><meta name="Ajax-Update-Ids" content="_id0,_id3:rep" /><span id="ajax-update-ids"><input type="hidden" name="jsf_sequence" value="1" /></span><meta id="Ajax-Response" name="Ajax-Response" content="true" /></body></html> debug[17:34:45,125]: Update page by list of rendered areas from response _id0,_id3:rep debug[17:34:45,125]: search for elements by name 'script' in element #document debug[17:34:45,140]: selectNodes found 1 debug[17:34:45,140]: <script> in response with src=/ajax4jsf/a4j.res/org.ajax4jsf.framework.ajax.AjaxScript.jsf debug[17:34:45,156]: Such element exist in document debug[17:34:45,156]: search for elements by name 'link' in element #document debug[17:34:45,171]: selectNodes found 0 debug[17:34:45,171]: Attempt to update part of page for Id: _id0 debug[17:34:45,187]: call selectSingleNode for id= _id0 debug[17:34:45,187]: Replace content of node by outerHTML() debug[17:34:45,187]: search for elements by name 'script' in element span debug[17:34:45,187]: selectNodes found 0 debug[17:34:45,203]: Scripts in updated part count : 0 debug[17:34:45,203]: Update part of page for Id: _id0 successful debug[17:34:45,203]: Attempt to update part of page for Id: _id3:rep debug[17:34:45,203]: call selectSingleNode for id= _id3:rep debug[17:34:45,203]: Replace content of node by outerHTML() debug[17:34:45,218]: search for elements by name 'script' in element span debug[17:34:45,218]: selectNodes found 0 debug[17:34:45,218]: Scripts in updated part count : 0 debug[17:34:45,218]: Update part of page for Id: _id3:rep successful debug[17:34:45,218]: call selectSingleNode for id= ajax-update-ids debug[17:34:45,234]: Hidden JSF state fields: debug[17:34:45,234]: search for elements by name 'input' in element span debug[17:34:45,234]: selectNodes found 1 debug[17:34:45,234]: Replace value for inputs: 3 by new values: 1 debug[17:34:45,234]: Input in response: jsf_sequence debug[17:34:45,250]: search for elements by name 'INPUT' in element span debug[17:34:45,250]: selectNodes found 0 debug[17:34:45,250]: Replace value for inputs: 3 by new values: 0 
 The different is: in the debug information of working jsp, the span in the response content contains the value "radio1":<span id="_id3:rep">radio1</span> 
 but the one in the jsp with custom tag has no value:<span id="_id3:rep"></span> 
 Is this why it doesn't work? And if yes, what might be the reason that causes this problem?
- 
        8. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 6:24 AM (in response to huangbo)yes, it looks like ajax itself works fine, but your custom component does 
 not update the #{bean.text}
 try<%@ page language="java"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://mydomain.com/jsf" prefix="my"%> <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>repeater</title> </head> <body> <f:view> <h:form> <my:selectOneRadio id="r1" value="#{bean.text}"> <f:selectItem itemLabel="radio3" itemValue="radio3" /> <f:selectItem itemLabel="radio4" itemValue="radio4" /> </my:selectOneRadio> <h:commandButton value="Manual Refresh" /> <h:messages /> <h:outputText value="#{bean.text}" id="rep" /> </h:form> </f:view> </body> </html>
 I.e. I temporary removed ajax from the scene. Click the radio, then click the button. Does the "rep" updated well?
- 
        9. Re: use ajax4jsf in existing custom jsf componentshuangbo Jun 4, 2007 6:52 AM (in response to huangbo)No, the "rep" isn't updated...Seems I need to fix this first before I try a4j again. Thanks for your help. 
 BTW, must the custom component be able to update #{bean.text} so a4j could get the value? I thought a4j got value from the DOM using javascript...
- 
        10. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 8:37 AM (in response to huangbo)"huangbo" wrote: 
 BTW, must the custom component be able to update #{bean.text}...
 No. It should not be a difference between ajax and non-ajax
- 
        11. Re: use ajax4jsf in existing custom jsf componentsgrimholtz Jun 4, 2007 12:45 PM (in response to huangbo)I've got a very similar problem. Here is my custom component: <ppp:selectManyPicklist id="r1" ... > <a4j:support id="s1" event="onclick" reRender="pg1"/> <f:selectItems value="#{fooBean.collection}"/> </ppp:selectManyPicklist>
 This component renders two < select/> boxes with 4 < input/> buttons to move < option/>s between them:
 [url=http://img107.imageshack.us/my.php?image=capture642007123737pmce0.png][img=http://img107.imageshack.us/img107/8707/capture642007123737pmce0.th.png][/url]
 The <a4j:support/> tag adds onclick handlers to the < select/> boxes but not the < input/> buttons. How can I get the onclick handlers to render for the < input/> buttons instead?
 Many thanks,
 grimholtz
- 
        12. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 1:28 PM (in response to huangbo)a4j:support attached event on the server side. So, it does add handler to what attribute of the component you have. 
 If I were you I add one more custom event like 'onswitch" and invoke it each time user clicks on any of those four buttons.
- 
        13. Re: use ajax4jsf in existing custom jsf componentsgrimholtz Jun 4, 2007 1:43 PM (in response to huangbo)"SergeySmirnov" wrote: 
 a4j:support attached event on the server side. So, it does add handler to what attribute of the component you have.
 If I were you I add one more custom event like 'onswitch" and invoke it each time user clicks on any of those four buttons.
 Thank you, Sergey. Do you mean add custom event "onswitch" on the server-side to the UIComponents or on the client-side in the JS?
- 
        14. Re: use ajax4jsf in existing custom jsf componentssergeysmirnov Jun 4, 2007 1:51 PM (in response to huangbo)It should be an attribute 'onswitch' of the component ppp:selectManyPicklist . a4j:support cannot be attached to the event created dynamically on the client side (as soon as it is attached on the server side) 
 
     
    