JSF: Use RequestScope Need to Keep Page Value

今日遇到使用 @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 還是很不友善…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料