Используйте <f:validateBean>
, где вы устанавливаете атрибут disabled
.
<h:inputText value="#{bean.input}">
<f:validateBean disabled="#{bean.draft}" />
</h:inputText>
Если это оценивает true
, это будет пропускать всю проверку bean-компонента для свойства, связанного со значением ввода. Вы должны только убедиться, что свойство boolean draft
установлено до фазы проверки. Э.Г.
<h:commandButton value="Save draft" action="#{bean.saveDraft}">
<f:param name="draft" value="true" />
</h:commandButton>
с
@ManagedProperty("#{param.draft}")
private boolean draft;
или, если это bean-объект в области видимости, на котором @ManagedProperty
не будет работать:
public boolean isDraft() {
return "true".equals(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("draft"));
}
Другой способ - проверить в EL, нажата ли кнопка, определив наличие имени ее параметра. Например, со следующей формой и идентификатором кнопки
<h:form id="form">
<h:inputText value="#{bean.input}">
<f:validateBean disabled="#{not empty param['form:draft']}" />
</h:inputText>
<h:commandButton id="draft" value="Save draft" action="#{bean.saveDraft}" />
</h:form>