h:selectOneMenu中带有转换器的验证错误

时间:2012-10-18 07:35:35

标签: jsf

以下代码:

<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()+"%";   
} 
};

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分:1)

h:selectOneMenu中使用自定义转换器时,应始终覆盖所涉及对象的equals()方法。

另见

答案 1 :(得分:0)

使用&lt; h:消息 /&gt;标记它将显示验证错误并在单击按钮时更新它,或者您可以使用自动更新。

据我说: -

为什么你的按钮不起作用 ?? 因为每次点击提交按钮时它都会显示验证错误,但你没有使用它,这就是为什么它在你的屏幕上不可见。

在后退按钮上使用 immediate = true ,它将跳过验证阶段。