2011-09-15 106 views
2

我有一個表格,其中有一個域模型,其中有一些JSR-303驗證bean。現在我想在沒有任何驗證的情況下添加「保存草稿」功能。如果我在我的相應命令上設置immediate=true,則跳過驗證,但也會跳過表單提交。提交沒有bean驗證的表格

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

回答

4

使用<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檢查確定其參數名稱的存在。例如,使用以下表單和按鈕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> 
+0

再次感謝BalusC。奇蹟般有效。 – onigunn

+0

謝謝BalusC – ismail