2012-06-20 200 views
1

我正在使用primefaces 3.3。jsf primefaces驗證消息反覆顯示

我有一個DataTable看起來像這樣:

<p:dataTable value="#{someBean.items}" var="item" ..> 
    <p:column> 
    <p:inputText id="someInputText" validation="#{someBean.someValidator}"> 
    </p:column> 
    .. 
</p:dataTable> 

,要求確認標準:

public void someValidator (FacesContext context, UIComponent component, Object value) throws ValidatorException { 

    if(someCondition) { 
    throw new ValidatorException(
        new FacesMessage(FacesMessage.SEVERITY_ERROR, "error: ", "validation failed")); 
    } 

我的問題是,如果有在DataTable中,如果驗證幾個項目inputText組件的「someInputText」僅針對其中一個項目失敗,則會爲每個項目顯示驗證錯誤消息。

任何想法我可以解決這個問題?

+0

你有你的頁面上組件趕上全球性的錯誤?和/或你有每個輸入字段的?或者,您的代碼就像上面沒有組件? – BestPractices

回答

3

使用了P的屬性:消息是這樣的:

<p:dataTable value="#{someBean.items}" var="item"> 
    <p:column> 
    <p:inputText id="someInputText1" validator="#{someBean.someValidator}" value="item.name"> 
    <p:message id="someInputText1Msg" for="someInputText1" /> 
    </p:column> 
    <p:column> 
    <p:inputText id="someInputText2" validator="#{someBean.someValidator}" value="item.model"> 
    <p:message id="someInputText2Msg" for="someInputText2" /> 
    </p:column> 
</p:dataTable> 
+0

只是爲了確保:您還可以將*重新顯示* - 屬性* *設置爲false。已經呈現的消息將不會再次顯示。乾杯! – SimonSez

+0

謝謝你的回答。我試過了,但沒有奏效。對不起,但似乎你不明白我的問題。我的意思是,dataTable中的每個單獨項目(對象)都有一些inputText重複。例如,對於第一個項目,inputText的id將是「someDataTable:0:someInputText」,對於第二個「someDataTable:1:someInputText」等等。inputText組件僅針對每個項目(對象)重複。我的問題是,如果一個項目的inputText傳遞驗證,而另一個則不驗證,兩個inputTexts都會顯示驗證消息。 – Nurjan

+0

如果您觀察到clientIds someDataTable:0:someInputText和someDataTable:1:someInputText。 someDataTable是數據表的id,接着是rowindex,然後是someInputText,它是inputText的id。對於inputText,您使用的是相同的Ids,您需要爲每行的inputText具有唯一的id,然後通過for屬性使其僅針對特定的inputText顯示消息來引用它。 – Ravi

0

修改新的FacesMessage的創作使用component.getClientId(),而不是 「錯誤」。

即:

if(someCondition) { 
    throw new ValidatorException(
        new FacesMessage(FacesMessage.SEVERITY_ERROR, component.getClientId(), "validation failed")); 
    } 
+0

請在您的原始問題的評論中看到我的問題,並回應如果以下問題不能解決您的問題 – BestPractices