2011-09-16 88 views
1

我遇到了一個問題,當我試圖自定義驗證適用於輸入字段:JSF 2.0驗證結束語

我想使用由bean並綁定到AF生成自定義的驗證:驗證標籤:

<f:validator binding="#{bean.myValidator}"> 

相應的bean的方法是這樣的:

public Validator getMyValidator(){ 
    return new Validator(){...}; 
} 

如果我使用像這樣的輸入標籤上的標籤:

<h:input value="..."> 
    <f:validator binding="#{bean.myValidator}" /> 
</h:input> 

然後一切按預期工作。

不過,如果我使用的標籤周圍的其他方法是這樣的:

<f:validator binding="#{bean.myValidator}"> 
    <h:input value="..."> 
</f:validator> 

然後我得到的ServletException(「validatorID爲空」)。

這個異常的原因是什麼?

另外,我不明白的相應f:validator tag spec

如果這個元素嵌套有其他UIComponent孩子,驗證程序將被自動添加到所有的子組件,以及在UIComponent標記內作爲這一個。

我想我的f:驗證標記嵌套在f:view中,是否正確? 「對所有兒童組件」是什麼意思?誰的孩子成分?

回答

1

這個異常的原因是什麼?

我不確定。 Mojarra 2.1.3和MyFaces 2.1.1都暴露了同樣的問題。當驗證器是由<f:validator validatorId="myValidator">指定的獨立的@FacesValidator("myValidator")類時,它將起作用。 specvdl描述了這種行爲。您可能需要向JSF規範人員發佈issue report,以便在spec或vdl中更詳細地闡明這一點。


另外,我不明白相應F:驗證標籤規格:

如果這個元素嵌套有其他UIComponent孩子在UIComponent標籤中,驗證器會自動添加到所有的子組件以及這個。

我想我的f:驗證器標籤嵌套在f:view中,是否正確? 「對所有兒童組件」是什麼意思?誰的孩子成分?

這只是一個可怕的措辭,你試圖實現的只是支持:在一組組件上包裝一個通用的驗證器。您可能想要JSF規範人員更好地闡明這一點。