Ответ 1
Просто пусть атрибут required
оценит true
, когда кнопка отправки действительно нажата.
Ответ, однако, зависит от того, как ваша кнопка отправки выполняет свою логику (стандартная, f:ajax
, ICEfaces и т.д.). Но в основном это сводится к тому, что вы можете проверить карту параметров запроса для параметра запроса, который указывает, что нажата кнопка отправки.
Например, если это стандартная командная кнопка:
<h:form id="form">
...
<h:commandButton id="submit" value="Submit" action="#{bean.submit}" />
</h:form>
Затем вы можете проверить его, проверив, присутствует ли идентификатор клиента кнопки в карте параметров запроса:
<c:set var="submitButtonPressed" value="#{not empty param['form:submit']}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
Или, если это кнопка <f:ajax>
:
<h:form id="form">
...
<h:commandButton id="submit" value="Submit" action="#{bean.submit}">
<f:ajax execute="@form" ... />
</h:commandButton>
</h:form>
Затем вы можете проверить это, установив, что параметр javax.faces.source
равен идентификатору клиента кнопки:
<c:set var="submitButtonPressed" value="#{param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
Вы даже можете комбинировать оба:
<c:set var="submitButtonPressed" value="#{not empty param['form:submit'] or param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />