Necesito para ejecutar una JSF managed bean método de acción el uso de ajax durante el DOM de HTML load evento, similar a jQuery $(document).ready(function() { $.ajax(...) }). Solo puedo utilizar el código JavaScript generado por JSF en este proyecto. Es allí una manera de hacerlo en nativo JSF? El evento que puedo usar o que JSF ajax función que puedo usar?

Estoy usando JSF 2.0, Facelets y PrimeFaces.

Creo que esta pregunta aquí: stackoverflow.com/questions/3698200/… podría ayudar con esto :).
No, definitivamente no. ¿Eres nuevo en JSF?

OriginalEl autor Tiago Vieira Dos Santos | 2013-05-16

1 Comentario

  1. 20

    Varias maneras.

    1. Utilizar el «formulario oculto» truco (en realidad, «hack» se da la fealdad de 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 invocar en JS como a continuación:

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

      Nota de la importancia de la activación de onclick() en lugar de click() en caso de <h:commandButton>. El onclick() inmediatamente invoca el onclick función, mientras que el click() solo se activa con el evento «click» en el elemento, que no es compatible con IE. Si se utiliza un <h:commandLink>, usted puede utilizar con seguridad click() lugar.

      Para invocar durante load caso, considere la posibilidad de poner en <h:outputScript target="body">. El target="body" pone automáticamente el <script> en el extremo de la <body>, por lo tanto un $(document).ready() contenedor es innecesario.

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

    2. Como ya estás utilizando PrimeFaces, sólo tiene que utilizar su <p:remoteCommand>.

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

      Puede invocar en JS como a continuación:

      commandName();

      Sin embargo, esto no utilizar JSF nativo jsf.ajax.solicitud(), en lugar de ello utiliza PrimeFaces nativo jQuery (ya sabes, PrimeFaces es un componente JSF biblioteca en la parte superior de jQuery/IU).

      Para invocar durante load caso, establezca autoRun="true".

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

    3. Crear una personalizada UIComponent que se extiende UICommand y genera la necesaria JSF nativo jsf.ajax.request() llamada. Estás a continuación, en esencia reinventar la <p:remoteCommand> para utilizar los JSF ajax en lugar de jQuery. El JSF utilidad de la biblioteca OmniFaces tiene un <o:commandScript> componente que hace exactamente eso. Véase también el escaparate y la código fuente.

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

      Puede invocar en JS como a continuación:

      commandName();

      Para invocar durante load caso, establezca autorun="true".

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

    4. Actualizar a JSF 2.3 y uso el nativo <h:commandScript> componente. Está disponible desde 2.3.0-m06. La sintaxis es exactamente la misma que la anterior <o:commandScript>. Basta con sustituir o: por h:.

    Gracias BalusC! El problema fue resuelto con su secound opción, utilizando el componente remoteCommand, ahora funciona 100%!

    OriginalEl autor BalusC

Dejar respuesta

Please enter your comment!
Please enter your name here