Я так понимаю, что вы хотите показать строковое значение, которое было установлено методом действия? Вы можете показать его только после его завершения. Вы должны понимать, что JSF и JS не работают синхронно, как вы ожидаете от кодирования. JSF - это генератор кода HTML. JS работает только на текущем дереве HTML DOM. Вам нужно позволить JSF генерировать HTML-код таким образом, чтобы JS-код выполнялся, как только HTML-ответ поступает в веб-браузер.
Предполагая, что у вас есть этот JS:
function show(string) {
alert(string);
}
И при условии, что у вас есть этот боб:
private String message;
public void show() {
message = "Hello!";
}
public String getMessage() {
return message;
}
Если вы используете JSF 1.x, используйте следующий подход:
<h:commandButton value="show" action="#{bean.show}" />
<h:panelGroup rendered="#{not empty bean.message}">
<script>show('#{bean.message}');</script>
</h:panelGroup>
Если вы используете JSF 2.x, который поддерживает ajax, вы можете альтернативно использовать следующий подход:
<h:commandButton value="show" action="#{bean.show}">
<f:ajax render="message" />
</h:commandButton>
<h:panelGroup id="message">
<h:panelGroup rendered="#{not empty bean.message}">
<script>show('#{bean.message}');</script>
</h:panelGroup>
</h:panelGroup>