我有一个表单,其中包含一些带有JSR-303
验证bean的域模型。现在我想在没有任何验证的情况下添加“保存草稿”功能。如果我在相应的commandButton上设置immediate=true
,则会跳过验证,但也会提交表单。
有没有办法在我的保存草稿操作中更新模型?
答案 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>