1

ケースは次のとおりです。

ファイルを解析する Bean メソッドがあり、解析が失敗した場合はエラー メッセージが追加され、解析が成功した場合は成功メッセージが追加されます。

しかし、fail>success という操作を連続して行うと、fail メッセージが消えて成功メッセージが表示されると思いますが、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>

アップデート:

ここで回避策も試しました:

JSFでコンポーネントHTMLコンテンツを削除することは可能ですか

新しいメッセージを追加する前にメッセージ div をクリアしますが、新しいメッセージはありません。彼が古いメッセージをどこから取得したのかわかりません。

更新 2:

ここに記載されている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
4

3 に答える 3

2

最後に、最新バージョンの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

それが役立つことを願っています。

于 2011-12-05T15:16:18.620 に答える
0

私は Icefaces 3.3 にいて、同様の問題を抱えていました。私は次のコードを使用してこれを解決しました(ところで、@BalusCが彼のコメントでそのような解決策をすでに指摘していることもわかります):

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));
于 2015-08-02T15:35:29.423 に答える