我做了一个NotificationHandler类,这个类包含一个静态列表。 为了允许访问这个列表,我用一个返回这个列表的getter创建了一个SessionScopped bean。构造函数之前的JSF页面加载数据
我的问题是这样的:
我在页面A,我把通知列表,网页A再生,正在显示的通知。
然后我在网页A送我到页面B.
在网页B点击一个链接有一个构造至极销毁清单。 但是,JSF页面在调用构造函数之前显示通知。
我结束了第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
问题是,我要刷新通知列表悫只有一些网页。
不知道,但听起来像是你应该使用'@ ManagedProperty'从另一个访问的bean,并以这种方式,您将能够如果导航之前访问并刷新通知... – Daniel
不知道我可以这样做,因为NotificationAccessorBean中除了getter之外什么都没有,我应该把它的内容放进去NotificationHandler在bean中? – Eildosa
当你在页面之间导航时,你引用了'action'属性中的任何方法?如果是的话,它可能在某个bean中实现,所以在这个bean中创建一个NotificationHandler的'@ ManagedProperty'并刷新通知(类似这样的) – Daniel