1

NotificationHandlerクラスを作成しました。このクラスには静的リストが含まれています。このリストへのアクセスを許可するために、このリストを返すゲッターを使用してSessionScoppedBeanを作成しました。

私の問題は次のとおりです。

私はページAにいます、リストに通知を入れました、ページAが再生成され、通知が表示されています。

次に、ページAのリンクをクリックして、ページBに移動します。

ページBには、リストを破棄するコンストラクターがあります。ただし、JSFページには、コンストラクターを呼び出す前に通知が表示されます。

ページAの通知でページBに行き着きます

通知ハンドラー:

package com.cog.util;

import java.util.ArrayList;
import java.util.List;

public class NotificationHandler {

private static List<Notification2> listeDeNotification = new ArrayList<Notification2>();

public static void flushNotification(){
    listeDeNotification.clear();
}

public static void raiseNotification(NotificationColor color, String code){
    listeDeNotification.add(new Notification2(color.toString(), code));
}

public static void raiseNotification(NotificationColor color, String code, String additionalMessage){
    listeDeNotification.add(new Notification2(color.toString(), code, additionalMessage));
}

public static void addAdditionalMessage(String code, String additionalMessage){
    for(Notification2 n : listeDeNotification){
        if (n.getCode().equals(code)){
            n.setAdditionalMessage(additionalMessage);
        }
    }
}

public static Integer getNotificationNumber(){
    return listeDeNotification.size();
}

public static List<Notification2> getListeDeNotification(){
    return listeDeNotification;
}

}

NotificationPrinter.xhtml

<composite:interface>
    <composite:attribute name="liste" />
    <composite:attribute name="locale" />
</composite:interface>

<composite:implementation>
    <ui:repeat value="#{cc.attrs.liste}" varStatus="status" var="l">
        <h:panelGrid width="100%" columns="1">
            <div id="alert" class="alert #{l.color}">
                <button class="close" data-dismiss="alert" type="button">×</button>
                <span class="rt">#{cc.attrs.locale[l.code]} #{l.additionalMessage}</span>
            </div>
        </h:panelGrid>
    </ui:repeat>
</composite:implementation>

AccessorBean

package com.cog.web.beans.util;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.cog.util.Notification2;
import com.cog.util.NotificationHandler;


@ManagedBean(name = "notificationAccessor")
@SessionScoped
public class NotificationAccessorBean {

    public List<Notification2> getNotificationList(){
        return NotificationHandler.getListeDeNotification();
    }

}

これが私がjsfに入れたものです

問題は、通知リストを一部のページ間でのみフラッシュしたいということです。

4

1 に答える 1

1

JSFを使用しているので、その利点(h:commandLink for example)を使用できます。また、 JSFをpreRenderViewページに配置してlistener、リストをフラッシュすることもできます。

次の説明/例を見てくださいJSF2PreRenderViewEventの例

于 2012-09-20T16:26:48.653 に答える