簡體   English   中英

從JSF中的請求ManagedBeans傳遞數據

[英]Passing data from request ManagedBeans in JSF

對於“ request”類型的ManagedBeans的生命周期,我有些困惑。

在此示例中,我使用一個請求bean“ userBean”填充此頁面,並使用一個請求bean“ userEditBean”填充以下編輯頁面。

<h:form>
    <h:panelGrid border="1" columns="2">

        <h:outputText value="Name" />
        <h:outputText value="#{userBean.user.name}" />
        ...
    </h:panelGrid>

    <h:commandButton value="Edit" action="edit" actionListener="#{userEditBean.init}">
        <f:attribute name="user" value="#{userBean.user}"/>
    </h:commandButton>
</h:form>

當我按下“編輯”按鈕時,將創建一個userEditBean,但屬性映射將“ user”解析為null。

這是否意味着在銷毀userBean之后解析屬性EL? 如何將值從傳入的Bean傳遞到傳出的Bean?

您正在使用表達式設置屬性值,而不是靜態值。 每當您請求該值時,該表達式將再次被重新求值。 userBean.user顯然不在后續請求中。 您需要確保它在那里(換句話說, userBean的構造userBean應確保已創建並設置了user

但是,還有其他選擇。 最好的方法之一就是使用Tomahawk<t:saveState> 將其添加到頁面中的某個位置:

<t:saveState value="#{userBean.user}" />

也就是說,我同意博佐的觀點,即整個方法有點奇怪,但這是另一回事了。 但是,您可能會從以下任何一篇文章中獲得許多有用的想法: JSF中的通信和/或Using Datatables 祝好運。

request范圍是指Bean在一個請求中存在。 然后,填寫您的編輯頁面(第一個請求),然后發送已編輯的用戶(第二個請求)。

除此之外, <f:attribute>在父組件中而不是request設置tha屬性。 因此,在代碼中,屬性將在button.getAttributes() (如果已綁定按鈕)。

此外,奇怪的是有一個名為initactionListener方法。 由於不需要事件,因此可以將action設置為將執行編輯操作的方法,並使該方法返回所需的導航規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM