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ć? 40
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
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