Отправить форму без проверки бина - PullRequest
2 голосов
/ 15 сентября 2011

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

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

1 Ответ

4 голосов
/ 15 сентября 2011

Используйте <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>
...