2013-02-15 72 views
0

我有幾個字段與JSFBean驗證和複雜的對象

<h:inputText 
    id  = "doi" 
    value = "#{detailModel.afterObject.doi}" 
/> 
<h:messages for="doi" style="clear: both; color: red;"/> 

以下對於其他領域我有一個禁用輸入文本預計

@NotNull(message = "{ch.ethz.id.wai.doi.validation.doi.missingdoi}") 
@Pattern(regexp = "10\\.[\\d.]+/.*", message = "{ch.ethz.id.wai.doi.validation.doi.invalidDoi}") 
private String doi; 

@ManyToOne 
@NotNull(message = "{ch.ethz.id.wai.doi.validation.doi.missingpool}") 
private DoiPool doiPool; 

第一註釋工作豆在那裏我把名稱的引用對象。用戶可以通過單擊按鈕並在單獨的視圖中選擇它來指定對象。

<h:inputText 
    id  = "doiPool" 
    value = "#{detailModel.afterObject.doiPool.name}" 
    disabled = "true" 
/> 
<h:messages for="doiPool" style="clear: both; color: red;"/> 

由於inputText並不是指detailModel.afterObject.doiPool,但它的名字沒有任何反應。

我怎麼能強迫detailModel.afterObject.doiPool驗證,即使它不直接與輸入字段編輯?

回答

1

作爲除了BalusC的答案:

@NotNull是在DoiPool對象,而不是他的名字規定(即在文本字段中顯示出)。爲了使它工作的文本字段需要綁定到驗證的字段:

<h:inputText 
    id  = "doiPool" 
    value = "#{detailModel.afterObject.doiPool}" 
    disabled = "#{facesContext.renderResponse}" 
> 
    <f:converter converterId="ch.ethz.id.wai.doi.DoiPoolConverter"></f:converter> 
</h:inputText> 

轉換器只返回對象的getName()

@FacesConverter("ch.ethz.id.wai.doi.DoiPoolConverter") 
public class DoiPoolConverter implements Converter 
{ 

    /** 
    * This converter works only in the other direction. 
    * 
    * @return null 
    */ 
    @Override 
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String string) 
    { 
      return null; 
    } 

    @Override 
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) 
    { 
      if (object instanceof DoiPool) 
      { 
        return ((DoiPool)object).getName(); 
      } 
      return null; 
    } 
} 
2

禁用輸入被處理的形式提交期間跳過。

讓比呈現響應其他階段回發期間disabled屬性評估false

<h:inputText ... disabled="#{not facesContext.postback or facesContext.renderResponse}" /> 

這樣它將在表單提交期間評估false並因此包括在處理中。

+0

謝謝,但它似乎沒有工作。如果我設置了'disabled = false',驗證會被執行,但是對於'disabled = true',您的建議會被忽略。這似乎與'\t \t \t \t \t \t \t \t \t禁用= 「#{} facesContext.renderResponse」'工作 – Matteo 2013-02-15 16:51:10