#jsf #navigation #submenu
#jsf #навигация #подменю
Вопрос:
Я использую пользовательский шаблон с боковой панелью: у меня есть 3 сгруппированных меню, которые можно открывать или закрывать. Я бы открывал меню только тогда, когда я нахожусь на определенных страницах.
Я попытался использовать NavigationController со свойством, которое позволяет мне понять, «где» мы сейчас находимся, чтобы я мог открыть нужное меню.
@ManagedBean(eager = true)
@RequestScoped
public class NavigationController implements Serializable {
@ManagedProperty(value = "#{param.pageId}")
private String pageId;
public String showPage() {
switch(pageId) {
case "1": return "home";
case "21": return "cerca_a";
case "22": return "anagrafica?id_p=newamp;faces-redirect=true";
...
default: return "home";
}
}
//getter and setter
}
Используется в sideBar.xhtml следующим образом
<ul class="collapse list-unstyled #{navigationController.pageId lt 30? 'show':''}">
<li><h:commandLink action="#{navigationController.showPage}" value="Cerca">
<f:param name="pageId" value="31"/></h:commandLink></li>
...
</ul>
Это не работает, когда я использую ссылки с параметрами (случай 22): меню не открывается, оно теряет #{NavigationController.pageId}.
Уверен, что это происходит потому, что это @RequestScoped и когда я вызываю anagrafica?id_p=new выполняется AnagConverter.
Должен ли я использовать @ViewScoped? Как? Есть ли лучший способ сохранить пользовательскую «хлебную крошку»?
Большое спасибо!
Комментарии:
1. Итак, вы не понимаете, что
amp;faces-redirect=true
на самом деле делает? Удалите эту часть, и она будет работать. Если вы хотите сохранить его, вам также придется добавитьamp;pageId=22
его туда.2. Привет @BalusC: может быть, недостаточно ..! Если я не использую ‘amp;faces-redirect= true’, то меню работает, но параметр ‘id_p= new’ не отображается anagrafica.xhtml (который, в этом случае, создает страницу для нового элемента). Если я добавлю ‘amp;pageId= 22’, это работает, но отображается в URL-адресе браузера. Я полагаю, что нет более чистого решения. Спасибо!
3. Конечно, есть более чистое решение. Просто не используйте идентификаторы страниц, а используйте имена страниц / URL-адреса / пути.
4. Понял: я учусь 🙂 Большое спасибо!