Обновление / рендеринг Ajax не работает на компоненте с атрибутом рендеринга

Я пытаюсь 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}" />

Однако это не работает. Я могу заверить, что #{user} действительно доступно. Как это вызвано и как я могу решить это?

1 ответ

Решение

Невозможно повторно визуализировать (обновить) компонент с помощью ajax, если сам компонент не отображается в первую очередь. Компонент должен всегда отображаться, прежде чем ajax сможет его повторно отобразить. Ajax использует JavaScript document.getElementById() найти компонент, который необходимо обновить. Но если JSF не визуализировал компонент в первую очередь, тогда JavaScript не может найти что-либо для обновления.

Решение состоит в том, чтобы просто ссылаться на родительский компонент, который всегда отображается.

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

Смотрите также:

Другие вопросы по тегам