Поскольку вы уже используете JSF2, рассмотрите возможность замены синхронных запросов асинхронными запросами, введя <f:ajax execute="@form" render="@form">
в нужных местах.
Например,
<h:form>
<h:messages />
<h:inputText required="true" />
...
<h:commandButton value="submit">
<f:ajax execute="@form" render="@form">
</h:commandButton>
</h:form>
<h:form>
<h:messages />
<h:inputText required="true" />
...
<h:commandButton value="submit">
<f:ajax execute="@form" render="@form">
</h:commandButton>
</h:form>
Таким образом, только содержимоетекущего <h:form>
будет перерисовано после отправки.Дополнительным преимуществом является более быстрая обратная связь и улучшенное взаимодействие с пользователем благодаря использованию ajax.
Если по какой-либо причине это не вариант, лучше всего использовать атрибут rendered
, чтобы условно отображать компонент <h:messages>
в зависимости отна вызываемой кнопке (чья пара имя = значение (имя - идентификатор клиента) будет присутствовать в карте параметров запроса).Например,
<h:form>
<h:messages rendered="#{not empty param[button1.clientId]}" />
<h:inputText required="true" />
...
<h:commandButton binding="#{button1}" value="submit" />
</h:form>
<h:form>
<h:messages rendered="#{not empty param[button2.clientId]}" />
<h:inputText required="true" />
...
<h:commandButton binding="#{button2}" value="submit" />
</h:form>