【问题标题】:How to remove specific FacesMessage from FacesContext?如何从 FacesContext 中删除特定的 FacesMessage?
【发布时间】:2015-07-13 14:12:18
【问题描述】:

我们如何从FacesContext 中删除特定的FacesMessage。假设我有一个列表,其中包含两个 FacesMessages,其详细信息(getDetail())是 Mandatory FieldsInvalid Account Number,我想删除 Mandatory Fields FacesMessage

下面是我的示例代码:

ListIterator<?> cmessages = context.getMessageList().listIterator();
cmessages.hasPrevious();
while (cmessages.hasNext() && cmessages!=null) {

    FacesMessage msg =(FacesMessage) ((cmessages.next() instanceof FacesMessage)?cmessages.next():null);
    if(msg!=null){
        if(msg.getDetail().equals(messageDetail)){
              cmessages.next();
              cmessages.remove();
        }
     }
}

因为我上面的代码有时也会给我UnsupportedOperation 异常

【问题讨论】:

  • “有时给我 UnsupportedOperation 异常” 好的异常已经代表了问题的全部答案。这只是能够解释它们的问题。我们可以通俗地翻译它们。因此,如果您向可以为您翻译它们的人隐藏所有异常详细信息,这将无济于事。异常和堆栈跟踪绝对不像无用的装饰。详细说明它们。
  • 道歉!!报告了UnsupportedOperation,因为我之前试图访问列表中不存在的元素

标签: validation jsf jsf-2.2


【解决方案1】:

下面是我写的代码 sn-p 解决了我的问题

public static void clearMessagesWithID(String messageID)
{
  String messageDetail = getErrorMessage(messageID);
  FacesContext context = FacesContext.getCurrentInstance();
  for (Iterator<FacesMessage> iterator = context.getMessages(); iterator.hasNext();) {
    FacesMessage msg = iterator.next();
    if (msg.getDetail().contains(messageDetail)) {
      // Remove the current element from the iterator and the list.
      iterator.remove();
    }
  }
}

并且报告了UnsupportedOperation,因为我之前试图访问列表中不存在的元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2012-02-19
    • 2017-07-25
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多