Ajax update / render no funciona en un componente que tiene atributo renderizado


Estoy tratando de ajax-actualizar un componente representado condicionalmente.

<h:form>
    ...
    <h:commandButton value="Login" action="#{login.submit}">
        <f:ajax execute="@form" render=":text" />
    </h:commandButton>
</h:form>
<h:outputText id="text" value="You're logged in!" rendered="#{not empty user}" />

Sin Embargo, eso no funciona. Puedo asegurar que #{user} está realmente disponible. ¿Cómo se causa esto y cómo puedo resolverlo?

Author: BalusC, 2013-02-09

1 answers

No es posible volver a renderizar (actualizar) un componente por ajax si el componente en sí no se renderiza en primer lugar. El componente debe ser siempre renderizado antes de que ajax pueda volver a renderizarlo. Ajax está usando JavaScript document.getElementById() para encontrar el componente que necesita ser actualizado. Pero si JSF no ha renderizado el componente en primer lugar, entonces JavaScript no puede encontrar nada para actualizar.

La solución es simplemente hacer referencia a un componente padre que siempre se representa.

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax ... render=":text" />
    </h:commandButton>
</h:form>
<h:panelGroup id="text">
    <h:outputText ... rendered="#{not empty user}" />
</h:panelGroup>

Véase también:

 79
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:28