Jsf h:selectOneMenu(带转换器)中的验证错误

Jsf h:selectOneMenu(带转换器)中的验证错误,jsf,Jsf,以下代码: <h:selectOneMenu id="discountCode" value="#{customerMBean.details.discountcode}" title="DiscountCode" required="true" requiredMessage="The DiscountCode field is required." converter="#{customerMBean.discountCodeConverter}

以下代码:

<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}"/> 
这是如何造成的,我如何解决它?

使用标签它将显示验证错误,并在单击按钮时更新它,或者您可以使用自动更新

据我说:-

为什么按钮不工作??因为每次单击“提交”按钮时,都会显示验证错误,但您没有使用,这就是为什么它在屏幕上不可见


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

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

另请参见


这是什么时候发生的?在页面加载时或提交后?当我单击其中一个按钮(后退或更新)时,它会显示此错误。我尝试了immediate=true,它会显示列表,但不会更新我输入的值(CustomerDetails.xhtml页面包含from:name email phone等)当我在更改一个值后单击按钮更新时,它应该保存它并更新列表。因此,在单击按钮更新SelectOne菜单后。如果这不起作用,那么试试这个,它肯定会起作用->在托管bean的更新函数清除列表中,再次创建并更新“选择一个”菜单,因为这是我的第一个教程,但“equals()方法”是什么?equals()方法不是任何JSF结构的一部分,它是普通旧Java的一部分。此方法用于比较普通的旧POJO。我刚刚找到了一个可以为您提供问题解决方案的链接:[link]您读过类似于[link]的问题吗?
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()+"%";   
} 
};