Атрибут компонента rendered
компонента JSF - это параметр на стороне сервера, который определяет, должен ли JSF генерировать нужный HTML-код или нет.
атрибут The <f:ajax>
тега render
должен указывать на (относительно) клиента идентификатор JSF сгенерированного HTML элемент, который JavaScript может захватить с помощью document.getElementById()
из HTML DOM дерева, чтобы заменить его содержимое на полный запроса Ajax.
Однако, поскольку вы указываете идентификатор клиента HTML-элемента, который никогда не отображается JSF (из-за rendered
, являющегося false
), JavaScript не может найти его в дереве HTML DOM.
Вы должны обернуть его в компонент контейнера, который всегда оказанной, и, таким образом, всегда доступны в дереве HTML DOM.
<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="messages" />
</h:commandButton>
<p>
<h:panelGroup id="messages">
<h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/>
<h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/>
</h:panelGroup>
</p>
Unrelated к конкретной проблеме, вы, там возможный дизайн ошибки. Почему бы вам не просто создать #{Bean.message}
свойство, которое вы установили с требуемым сообщением в способе действия вместо этого, так что вы можете просто использовать:
<h:commandButton action="#{Bean.method()}" value="Submit">
<f:ajax execute="something" render="message" />
</h:commandButton>
<p>
<h:outputFormat id="message" value="#{Bean.message}" />
</p>
Благодарим вас за ответ. Я сделал то, что я использовал render = "@ form" в своей форме, и это сработало. Я попробую хотя бы то, что вы предложили. – sandra
Это действительно будет работать, если это родительский компонент, который всегда * отображается (точно так же, как мой ответ пытается сказать вам). Например, может быть, только лишние накладные расходы, если форма содержит 10 других компонентов, которые, например, не нуждаются в обновлении. – BalusC
Можно ли добавить условие в рендеринг ajax? –