【问题标题】:Submit form without bean validation提交表单而不进行 bean 验证
【发布时间】:2011-11-18 03:48:09
【问题描述】:

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

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

【问题讨论】:

    标签: java validation jsf-2 bean-validation


    【解决方案1】:

    在您设置disabled 属性的位置使用<f:validateBean>

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

    或者如果它是 @ManagedProperty 不起作用的视图范围 bean:

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

    另一种方法是通过确定其参数名称的存在来检查按钮是否被按下。例如,使用以下表单和按钮 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>
    

    【讨论】:

    • 再次感谢 BalusC。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多