Is there a way to call (execute) a JavaScript function from managed bean in JSF?
If that's relevant, I'm also using PrimeFaces.
Is there a way to call (execute) a JavaScript function from managed bean in JSF?
If that's relevant, I'm also using PrimeFaces.
In PrimeFaces pre 6.2, you can use
RequestContext#execute()
for this.In PrimeFaces 6.2 and up:
In standard JSF, there is no direct public API for that. Best what you can get is to set the desired script as a bean property and conditionally render a
<h:outputScript>
component when the bean property is not empty.In case you're submitting the form by ajax, don't forget to wrap the
<h:outputScript>
in another component and ajax-update it instead. See also Ajax update/render does not work on a component which has rendered attribute.As to "there is no direct public API for that" statement, curiously the
PartialResponseWriter
class (responsible for writing JSF ajax responses) has already since JSF 2.0startEval()
andendEval()
methods which should enable you to write callback scripts directly to the response but until upcoming JSF 2.3 there's surprisingly no public method inPartialViewContext
which will delegate to those methods. As per issue 1412PartialViewContext#getEvalScripts()
is finally been added to public API.For older JSF versions, this can only be implemented by creating a custom
PartialViewContext
implementation. JSF utility library OmniFaces has done exactly that withOmniPartialViewContext
which can be used viaAjax
utility class.See also:
You can't simply.
Managed Bean
works on server and JavaScript on browser.You can make conditionally invoke JavaScript depending on the value set in managedbean
In general, Java provides an API to evaluate a string using a scripting engine. This can be accomplished by javax.script.ScriptEngine and javax.script.ScriptEngineManager classes.
I am not entirely sure what your situation is, but if you can pass the javascript as a string to the managed bean, you could probably use Java scripting API to run the javascript on the server side.
For more information, check out this link: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html
Depending on which version of Primefaces you're on you can use
RequestContext.execute("{js here}");
From the Primefaces 3.4 documentation:
Code
Closest thing in Primefaces is;
http://www.primefaces.org/showcase/ui/callbackParams.jsf
Having said there is also an enhancement in 3.0;
http://code.google.com/p/primefaces/issues/detail?id=1342