【发布时间】:2011-11-18 03:48:09
【问题描述】:
我有一个表单,它有一个带有一些JSR-303 验证bean 的域模型。现在我想在没有任何验证的情况下包含一个“保存草稿”功能。如果我在相应的 commandButton 上设置 immediate=true,则会跳过验证,但也会跳过表单提交。
有没有办法在我的保存草稿操作中更新模型?
【问题讨论】:
标签: java validation jsf-2 bean-validation
我有一个表单,它有一个带有一些JSR-303 验证bean 的域模型。现在我想在没有任何验证的情况下包含一个“保存草稿”功能。如果我在相应的 commandButton 上设置 immediate=true,则会跳过验证,但也会跳过表单提交。
有没有办法在我的保存草稿操作中更新模型?
【问题讨论】:
标签: java validation jsf-2 bean-validation
在您设置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>
【讨论】: