pagina page funcion evento español ejecutar cargar javascript ajax jsf primefaces facelets

page - ¿Cómo invocar un bean gestionado JSF en un evento HTML DOM usando JavaScript nativo?



funcion onload javascript (1)

Necesito ejecutar un método de acción de beans gestionado JSF utilizando ajax durante el evento de load HTML DOM, similar a jQuery''s $(document).ready(function() { $.ajax(...) }) . Solo puedo usar el JavaScript generado por JSF en este proyecto. ¿Hay alguna manera de hacerlo en JSF nativo? ¿Qué evento puedo usar o qué función JSF ajax puedo usar?

Estoy usando JSF 2.0, Facelets y PrimeFaces.


Varias maneras.

  1. Use el truco de la "forma oculta" (en realidad, "piratear" le da a la fealdad una mejor redacción).

    <h:form id="form" style="display:none;"> <h:commandButton id="button" action="#{bean.action}"> <f:ajax render=":results" /> </h:commandButton> </h:form> <h:panelGroup id="results"> ... </h:panelGroup>

    Puede invocarlo en JS de la siguiente manera:

    document.getElementById("form:button").onclick();

    Tenga en cuenta la importancia de activar onclick() lugar de click() en el caso de <h:commandButton> . El onclick() invoca inmediatamente la función onclick mientras que el click() solo activa el evento "clic" en el elemento, que no es compatible con IE. Si usaba un <h:commandLink> , puede usar click() forma segura.

    Para invocarlo durante load evento de load , considere ponerlo en <h:outputScript target="body"> . El target="body" coloca automáticamente el <script> en el extremo de <body> , por lo tanto, un contenedor $(document).ready() es innecesario.

    <h:outputScript target="body"> document.getElementById("form:button").onclick(); </h:outputScript>

  2. Como ya está utilizando PrimeFaces, simplemente use su <p:remoteCommand> .

    <h:form> <p:remoteCommand name="commandName" action="#{bean.action}" update=":results" /> </h:form> <h:panelGroup id="results"> ... </h:panelGroup>

    Puede invocarlo en JS de la siguiente manera:

    commandName();

    Sin embargo, esto no utiliza el JSF nativo jsf.ajax.request() , sino que utiliza PrimeFaces jQuery nativo (ya sabes, PrimeFaces es una biblioteca de componentes JSF sobre jQuery / UI).

    Para invocarlo durante load evento de load , establezca autoRun="true" .

    <p:remoteCommand ... autoRun="true" />

  3. Cree un UIComponent personalizado que amplíe UICommand y genere la llamada jsf.ajax.request() JSF nativa jsf.ajax.request() . En esencia, reinventa el <p:remoteCommand> para utilizar JSF ajax nativo en lugar de jQuery. La biblioteca de utilidades JSF OmniFaces tiene un componente <o:commandScript> que hace exactamente eso. Ver también el escaparate y el código fuente .

    <h:form> <o:commandScript name="commandName" action="#{bean.action}" render=":results" /> </h:form> <h:panelGroup id="results"> ... </h:panelGroup>

    Puede invocarlo en JS de la siguiente manera:

    commandName();

    Para invocarlo durante load evento de load , establezca autorun="true" .

    <o:commandScript ... autorun="true" />

  4. Actualice a JSF 2.3 y use el componente nativo <h:commandScript> . Está disponible desde 2.3.0-m06 . La sintaxis es exactamente la misma que la anterior <o:commandScript> . Simplemente reemplace o: por h: