There is no direct way to do that. I would love to have some kind of
h:outputScript which could render against the body end. The reason for
this is, you can get a significant performance boost if you push the
script includes to the bottom of the page.
But anyway, the way to do this dynamically for ajax is to use the event
handlers.
jsf.ajax.request(... onevent: funtion(event) {
if(event.status === "complete") //insert script tag at the bottom
})
The problem with this approach simply is if you want to push script tags
later dynamically, most modern browsers simply wont eval them anymore.
There is a technique where you push scripts after page loading into the
head or after the head, this works on some browsers and on some it wont.
Funnily jQuery uses this method to cover the global Eval problem, which
then fails on many modern browsers. We use a stage approach for this
problem, we try to determine which method is the best for global eval
and then use it - there are about 5-6 ways to achieve a global eval and
depending on the browser you have to apply one method or the other.
HTML5 also has something for the late loading of scripts, but I have not
looked to deeply into it yet.
Either way, if you need a late loading of scripts within an jsf ajax
cycle it is probabyle better to include the script tag within the
updated content (where our jsf javascript runtime can take care of it
and does)
Or if you need a check whether the script already is included, use ajax
to load the script run a global eval (both methods are impl methods on
our _Runtime.js) manually and set a global variable/namespace which can
be checked for later refreshes whether the script is already loaded.
The best bet is probably not to load any script lazily at all, bundle
everything into one big compressed javascript file, and use a script src
with defer set or push the script at the bottom of the page, if possible.
Werner
Am 03.08.11 10:39, schrieb Jakob Korherr:
Hi,
Nope, I don't think so. Maybe you can achieve it via a javascript
event-handler on the client, but I actually don't know for sure. Maybe
Werner can help you out!
Regards,
Jakob
2011/8/2 Martin Koci<[email protected]>:
Hi,
has JSF an official API to achieve similar functionality as [1] ?
Purpose and use case:
1) JSF process partially view
2) JSF artifact creates and queues a request "render this script ...
before</body>"
3) new element script is created and rendered before</body>
this is not same same @Resource(target="body"). Also this must work with
partial response wihout explicit render="@all"
Any ideas?
Thanks,
Kočičák
[1]
https://svn.apache.org/repos/asf/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/DialogRequest.java