今日遇到使用 @RequestScope 對 Primefaces DateTable page 無法正確 rendered 的問題 (資料已分頁化),恐怕要調整回 @ViewScope….
以下是針對頁面 keep 需要欄位的 example (使用 FlashScope):
view:
<c:if test="#{not empty noticeListPersonalController.history}"> <c:set target="#{flash}" property="history" value="#{noticeListPersonalController.history}"/> </c:if> <c:if test="#{not empty flash.history}"> <c:set target="#{noticeListPersonalController}" property="history" value="#{flash.history}"/> </c:if> <p:tabMenu activeIndex="#{(empty param.history or param.history eq 'N') ? 0 : 1}"> <p:menuitem value="待審核單據" outcome="list_personal"> <f:param name="history" value="N"/> </p:menuitem> <p:menuitem value="歷史紀錄查詢" outcome="list_personal"> <f:param name="history" value="Y"/> </p:menuitem> </p:tabMenu>
controller:
// ... @PostConstruct private void init() { if (Faces.getFlash().containsKey("history")) { if (Faces.getRequestParameter("history") != null) history = Faces.getRequestParameter("history").equals("Y"); else history = (boolean) Faces.getFlash().get("history"); } else { if (Faces.getRequestParameter("history") != null) history = Faces.getRequestParameter("history").equals("Y"); else history = false; Faces.getFlash().put("history", history); } } // ...
結語:
Primefaces 對 @RequestScope 還是很不友善…