sencillos resueltos llamar funciones ejemplos desde codigos javascript jsf primefaces managed-bean

resueltos - Llamar a una función de JavaScript desde beans administrados



javascript pdf 2017 (5)

¿Hay alguna manera de llamar (ejecutar) una función de JavaScript desde Bean administrado en JSF?

Si eso es relevante, también estoy usando PrimeFaces.


En PrimeFaces pre 6.2, puede usar RequestContext#execute() para esto.

public void submit() { // ... RequestContext.getCurrentInstance().execute("alert(''peek-a-boo'');"); }

En PrimeFaces 6.2 y versiones posteriores:

public void submit() { // ... PrimeFaces.current().executeScript("alert(''peek-a-boo'');"); }

En JSF estándar, no existe una API pública directa para eso. Lo mejor que puede obtener es establecer la secuencia de comandos deseada como una propiedad de bean y representar condicionalmente un componente <h:outputScript> cuando la propiedad de bean no esté vacía.

<h:commandButton ... action="#{bean.submit}" /> <h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>

public void submit() { // ... script = "alert(''peek-a-boo'');"; }

En caso de que envíe el formulario por ajax, no olvide envolver el <h:outputScript> en otro componente y ajax-update en su lugar. Ver también Ajax update / render no funciona en un componente que tiene atributo renderizado .

<h:commandButton ... action="#{bean.submit}"> <f:ajax execute="@form" render="script" /> </h:commandButton> <h:panelGroup id="script"> <h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript> </h:panelGroup>

En cuanto a "no hay una API pública directa para esa" declaración, curiosamente la clase PartialResponseWriter (responsable de escribir respuestas startEval() ajax) ya tiene métodos JSF 2.0 startEval() y endEval() que deberían permitirle escribir scripts de devolución de llamada directamente al respuesta, pero hasta el próximo JSF 2.3 sorprendentemente no hay un método público en PartialViewContext que delegue en esos métodos. Según el número 1412 PartialViewContext#getEvalScripts() finalmente se ha agregado a la API pública.

public void submit() { // ... FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert(''peek-a-boo'');"); }

Para las versiones anteriores de JSF, esto solo se puede implementar creando una implementación personalizada de PartialViewContext . La biblioteca de utilidades JSF OmniFaces ha hecho exactamente eso con OmniPartialViewContext que se puede usar a través de la clase de utilidad Ajax .

public void submit() { // ... Ajax.oncomplete("alert(''peek-a-boo'');"); }

Ver también:


En general, Java proporciona una API para evaluar una cadena utilizando un motor de scripting. Esto se puede lograr mediante las clases javax.script.ScriptEngine y javax.script.ScriptEngineManager.

No estoy del todo seguro de cuál es su situación, pero si puede pasar el javascript como una cadena al bean administrado, probablemente pueda usar la API de scripting de Java para ejecutar javascript en el lado del servidor.

Para obtener más información, consulte este enlace: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html



No puedes simplemente.

Managed Bean funciona en el servidor y JavaScript en el navegador.

Puede hacer que JavaScript invoque condicionalmente según el valor establecido en managedbean


Según la versión de Primefaces en la que esté, puede usar RequestContext.execute("{js here}");

De la documentación de Primefaces 3.4:

RequestContext proporciona una forma de ejecutar javascript cuando se completa la solicitud de ajax, este enfoque es más fácil en comparación con pasar parámetros de devolución de llamada y ejecutar javascript condicional. El siguiente ejemplo oculta el diálogo cuando se completa la solicitud ajax;

Código

public void save() { RequestContext requestContext = RequestContext.getCurrentInstance(); requestContext.execute("dialog.hide()"); }