Jsf 为什么组件上的面消息是附加的?

Jsf 为什么组件上的面消息是附加的?,jsf,Jsf,我正在向我的组件添加验证消息。我有许多输入,然后我在一个附加到隐藏输入的验证器中一起验证它们,隐藏输入在所有这些组件之上声明。我发现每次验证失败时,都会不断添加相同的消息 “输入x大于输入Y”这样的消息显示两次,即使它应该显示一次。然后我更正错误值,它就消失了。接下来,我故意再次插入相同的错误值。然后我将看到上面的错误消息三次 如何清除以前请求中的消息 以下是人为设计的相关代码: if (all condition passes) { for(UIInput:components){

我正在向我的组件添加验证消息。我有许多输入,然后我在一个附加到隐藏输入的验证器中一起验证它们,隐藏输入在所有这些组件之上声明。我发现每次验证失败时,都会不断添加相同的消息

“输入x大于输入Y”这样的消息显示两次,即使它应该显示一次。然后我更正错误值,它就消失了。接下来,我故意再次插入相同的错误值。然后我将看到上面的错误消息三次

如何清除以前请求中的消息

以下是人为设计的相关代码:

if (all condition passes) {
    for(UIInput:components){
        input.setValid(true);
    }


} else {
      //Find out the first component that fails the validation and mark it red
      FacesContext context = FacesContext.getCurrentInstance();
      UIInput input= components.getInvalidComponent();
      input.setValid(false);
      context.addMessage(input.getClientId(context),message) ;                           
    }

p.S:我正在使用JSF1.2

Faces消息是请求范围的。所以你的“先前请求的消息”没有有效的依据。重复消息实际上已添加到同一请求中。只要在
FacesContext#addMessage()
上设置一个调试断点,就可以锁定罪犯。或者,您可能正在使用ajax,并且由于呈现不一致而被误导。@BalusC是的,我正在使用ajax,但我不理解您关于呈现不一致性的观点。您能解释一下您的意思吗?例如,在呈现ajax响应期间,之前的消息没有从HTML DOM中清除。很难说,因为缺少关于所使用的ajax库的信息,并且看到了ajax请求的HTTP响应体。@BalusC除此之外,我在这里做了什么根本错误的事情吗?