2012-10-18 29 views
0

以下代碼:驗證錯誤在H:selectOneMenu用於與轉換器

<h:selectOneMenu id="discountCode" value="#{customerMBean.details.discountcode}" 
    title="DiscountCode" required="true" requiredMessage="The DiscountCode  field is required." 
    converter="#{customerMBean.discountCodeConverter}"> 
    <f:selectItems value="#{customerMBean.allDiscountCodes}"/> 
</h:selectOneMenu> 
<h:commandButton id="back" value="Back" action="#{customerMBean.list}"/> 
<h:commandButton id="update" value="Update" action="#{customerMBean.update}"/> 

顯示下面的錯誤,無論按下按鈕:

j_idt6:discountCode:驗證錯誤。

public Converter getDiscountCodeConverter() { 
return discountCodeConverter; 
} 

private Converter discountCodeConverter = new Converter() { 

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    return new ConverterException("On verra la conversion String->Objet plus tard..."); 
} 
    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value)  { 
    DiscountCode dc = (DiscountCode) value; 
    return dc.getDiscountcode()+" : "+dc.getRate()+"%"; 
} 
}; 

這是怎麼造成的,我該如何解決呢?

+0

這件事發生的時候?在頁面加載或提交後? – Aquillo

+0

提交 – manu

+0

後,當我點擊其中一個按鈕(返回或更新)它顯示此錯誤 – manu

回答

0

使用< h:消息 />標記它會告訴你驗證錯誤,並點擊按鈕更新它,或者你可以使用自動更新。

據我: -

爲什麼你的按鈕不工作,因爲每次當你點擊提交按鈕時,它會顯示你驗證錯誤,但你沒有使用這就是爲什麼它不顯示在你的屏幕上。

並且在後退按鈕上使用immediate = true它將跳過驗證階段。

+0

我試過立即=真,它顯示我回來的列表,但不更新我輸入的值(頁面CustomerDetails.xhtml包含一個來自:名稱電子郵件電話等..)當我點擊按鈕更新後更改一個值它應該保存它並更新列表 – manu

+0

所以點擊按鈕後更新selectonemenu。如果這不起作用,那麼嘗試這一點肯定會工作 - >在你的託管bean更新函數清除列表中,並重新創建並更新選擇一個菜單 – Hunter

1

h:selectOneMenu中使用自定義轉換器時,應該始終覆蓋所涉及對象的equals()方法。

又見

+0

原諒我的無知,因爲這是我的第一個教程,但什麼是「等()方法」 – manu

+0

equals()方法不是任何JSF結構的一部分,它是純Java的一部分。這個方法用來比較普通的舊POJO。我剛剛找到一個鏈接,可能爲您提供解決方案,您的問題:[鏈接] http://www.crazysquirrel.com/computing/java/jsf/converter-validation-error.jspx [/鏈接] – Aquillo

+0

我做了重寫equals方法,但它不起作用 – manu