提交没有bean验证的表单

时间:2011-09-15 19:00:33

标签: java validation jsf-2 bean-validation

我有一个表单,其中包含一些带有JSR-303验证bean的域模型。现在我想在没有任何验证的情况下添加“保存草稿”功能。如果我在相应的commandButton上设置immediate=true,则会跳过验证,但也会提交表单。

有没有办法在我的保存草稿操作中更新模型?

1 个答案:

答案 0 :(得分:4)

使用<f:validateBean>在哪里设置disabled属性。

<h:inputText value="#{bean.input}">
    <f:validateBean disabled="#{bean.draft}" />
</h:inputText>

如果这评估true,这将跳过与输入值相关联的属性上的所有bean验证。您应该只确保在验证阶段之前设置boolean draft属性。 E.g。

<h:commandButton value="Save draft" action="#{bean.saveDraft}">
    <f:param name="draft" value="true" />
</h:commandButton>

@ManagedProperty("#{param.draft}")
private boolean draft;

或者如果它是@ManagedProperty无效的视图范围bean:

public boolean isDraft() {
    return "true".equals(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("draft"));
}

另一种方法是通过确定其参数名称的存在来检查EL是否按下按钮。例如,使用以下表单和按钮ID

<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>