J'utilise un Bean (MenuBean) pour créer dynamiquement uneharicot clair SessionScoped quand la page rafraîchissante
<p:breadCrumb model="#{menuBean.model}" />
Lors de la transition à travers chaque page de mon application, je pousse ou pages pop à partir d'une « pile de page », donc pour adapter le breadCrumb de chaque page.
@ManagedBean
@SessionScoped
public class MenuBean implements Serializable {
private MenuModel model;
private int navIdx;
private ArrayList<String[]> pageStack;
@PostConstruct
public void init() {
pageStack = new ArrayList<>();
navIdx = 0;
String [] home = new String[2];
home[0] = "Home";
home[1] = "home.xhtml";
pageStack.add(home);
refreshModel();
}
private void refreshModel() {
model = new DefaultMenuModel();
int i = 0;
for(String[] s: pageStack) {
DefaultMenuItem index = new DefaultMenuItem();
index.setValue(s[0]);
index.setCommand("#{menuBean.navigate}");
index.setParam("index", String.valueOf(i++));
model.addElement(index);
}
}
private void push(String [] page) {
pageStack.add(page);
navIdx++;
refreshModel();
}
private String pop() {
pageStack.remove(navIdx--);
String[] prevPage = pageStack.get(navIdx);
refreshModel();
return prevPage[1];
}
}
Afin de maintenir cette pile, mon MenuBean est SessionScoped
.
Cependant, lorsque j'actualise la dernière page par exemple, la page initiale est affichée (puisque l'url ne change pas) mais le breadCrumb affiche toujours la pile entière.
Ma question est: Y at-il un moyen d'effacer le MenuBean lorsque l'utilisateur quitte la page, ou l'actualise?
Merci, cela a fonctionné pour moi. Je devais aussi ajouter un 'update =" breadCrumb "' pour l'actualiser, mais le 'autoRun' était ce que je cherchais. – parakmiakos
@parakmiakos: vous ne pouviez pas utiliser un événement prerenderview? – Kukeltje
@Kukeltje Pourriez-vous élaborer? : D – parakmiakos