【问题标题】:Faces messages are not cleared on subsequent requests后续请求不会清除 Faces 消息
【发布时间】:2012-01-03 04:23:00
【问题描述】:

案例如下:

你有一个解析文件的bean方法,如果解析失败,则添加错误消息,如果解析成功,则添加成功消息。

但是当您进行连续操作时: fail > success ,我希望失败消息会消失并出现成功消息,但是发生的是失败消息仍然存在,并且成功消息被添加到它。

在添加消息之前清除 MessageList 不是一个解决方案,因为列表已经被清除,如果您尝试在添加消息之前打印消息列表大小,这两种情况都会为 0。

那么在成功的情况下删除失败消息的解决方案是什么,反之亦然?

豆子:

@Component("mybean")
@Scope("view")
public class MyBean {

    try {
        myservice.parseFile(file);
    } catch (Exception e) {
        FacesMessage msg = new FacesMessage();
        msg.setSeverity(FacesMessage.SEVERITY_FATAL);
        msg.setSummary("Invalid file.");
        facesContext.addMessage(null, msg);
        return;
    }

    FacesMessage msg = new FacesMessage();
    msg.setSeverity(FacesMessage.SEVERITY_INFO);
    msg.setSummary("Success");
    facesContext.addMessage(null, msg);

}

查看:

<h:form>
    <ace:fileEntry id="fileEntryComp"
        label="File Entry"
        relativePath="uploaded"
        fileEntryListener="#{mybean.listener}" /> 

    <h:commandButton value="Upload File" />
    <h:messages  styleClass="myclass" infoStyle="Color:blue;" errorStyle="Color:red;" fatalStyle="margin-right: 85%; Color:red;" globalOnly="true"/> 
    <h:messages for="fileEntryComp" style="display:none;"/> <!-- to hide the faces development message-->     
</h:form>

更新:

我什至在这里尝试了解决方法:

Is is possible to delete Component HTML Content with JSF

在添加新消息之前清除消息div,但没有新消息,我不知道他从哪里得到旧消息。

更新 2:

我什至尝试了这里提到的两种解决方法:

http://www.icefaces.org/JForum/posts/list/19753.page#71521

1- 添加上下文参数:

<context-param>
    <param-name>org.icefaces.messagePersistence</param-name>
    <param-value>false</param-value>
</context-param> 

也不行。

2- 清除已保存的全局消息集合:

我试过这个解决方案:

 List<FacesMessage> globals = (List<FacesMessage>) facesContext.getViewRoot().getAttributes().get("org.icefaces.event.saved_global_faces_messages");
 if (globals != null) {
     globals.clear();
 }

但我总是遇到以下异常:

Caused by: java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.clear(Collections.java:1037)
    at com.xeno.phoneSuite.beans.DepartmentBean.listener(DepartmentBean.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at org.icefaces.component.fileentry.FileEntry.broadcast(FileEntry.java:311)
    ... 92 more

【问题讨论】:

  • 您的问题可能是由您呈现消息的方式引起的。显示它。
  • 嗯,这将与 IceFaces+Ajax 有关。抱歉,我不知道。
  • @Bhesh Gurung ,问题已更新。
  • 关于您第二次更新中的异常:您确实不能删除这样的人脸消息。它必须通过Iterator&lt;FacesMessage&gt; 上的Iterator#remove() 方法完成,例如FacesContext#getMessages() 返回。
  • 我听不懂,你能用代码示例解释一下吗?

标签: jsf jsf-2 icefaces icefaces-2


【解决方案1】:

最后,我在最新版本ICEfaces 2.1 Beta 2上尝试了上下文参数的解决方案,效果很好:

<context-param>
        <param-name>org.icefaces.messagePersistence</param-name>
        <param-value>false</param-value>
  </context-param>

http://wiki.icefaces.org/display/ICE/ICEfaces+2.1.0+Beta+2+Release+Notes#ICEfaces2.1.0Beta2ReleaseNotes-downloads

希望这会有所帮助。

【讨论】:

  • Prime Faces 有类似的东西吗?
【解决方案2】:

我在 Icefaces 3.3 中遇到了类似的问题。我使用以下代码解决了这个问题(哦,顺便说一句,我还看到@BalusC 已经在他的 cmets 中指出了这样的解决方案):

Iterator<FacesMessage> msgIterator = FacesContext.getCurrentInstance().getMessages();
while (msgIterator.hasNext())
{
    FacesMessage facesMessage = msgIterator.next();
    msgIterator.remove();
}

在推送类似这样的新消息之前放置上面的代码,应该清除旧消息并将其替换为新消息My Message

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "My Message", null));

【讨论】:

    【解决方案3】:

    我费了好大劲,最后修复很简单,不管是素面还是老面,加redisplay = false就行了。

    下面是sn-p的代码

    <p:messages id="globalMessages" global-only="true" redisplay="false">
       <p:autoUpdate/>
    </p:messages>
    

    【讨论】:

    • 问题是关于icefaces而不是primefaces
    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 2021-08-11
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2021-08-08
    • 2023-01-27
    相关资源
    最近更新 更多