Отправить форму без проверки bean-компонента

У меня есть форма, которая имеет модель предметной области с некоторыми JSR-303 bean-компонентами проверки. Теперь я хотел бы включить функцию «Сохранить черновик» без какой-либо проверки. Если я установлю immediate=true для соответствующей проверки commandButton, проверка будет пропущена, но также будет отправлена ​​​​форма.

Есть ли способ обновить модель в моем действии сохранения черновика?


person onigunn    schedule 15.09.2011    source источник


Ответы (1)


Используйте <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>
person BalusC    schedule 15.09.2011
comment
Еще раз спасибо BalusC. Работает как шарм. - person onigunn; 16.09.2011