Ajax update / render nie działa na komponencie, który renderował atrybut

Próbuję zaktualizować warunkowo renderowany komponent ajax.

<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}" />
To jednak nie działa. Mogę zapewnić, że {[1] } jest rzeczywiście dostępna. Jak to jest spowodowane i jak Mogę to rozwiązać?
Author: BalusC, 2013-02-09

1 answers

Nie jest możliwe ponowne renderowanie (aktualizacja) komponentu przez ajax, jeśli sam komponent nie jest renderowany w pierwszej kolejności. Komponent musi być zawsze renderowany, zanim ajax będzie mógł go ponownie renderować. Ajax używa JavaScript document.getElementById(), aby znaleźć komponent, który wymaga aktualizacji. Ale jeśli JSF nie wyrenderował komponentu w pierwszej kolejności, wtedy JavaScript nie może znaleźć niczego do aktualizacji.

Rozwiązaniem jest po prostu odwołanie się do komponentu nadrzędnego, który jest zawsze renderowany.

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

Zobacz także:

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:28