簡體   English   中英

使用來自同一個 class 的多個 bean,不同的范圍

[英]Use many beans from the same class, different scopes

我想使用 ManagedBean class、Users.java 創建 2 個不同范圍的 bean 實例。 我試圖通過兩種方式做到這一點:

1. 為用戶使用 ManagedBean 和 SessionScope 注釋(這將創建一個具有 session 范圍的“用戶”),並在 faces-config.xml 中聲明來自用戶的另一個 MenagedBean,請求 Z31A1ZFD1410BE4BEF2858C

@ManagedBean
@Component
@SessionScoped
public class Users implements Serializable {...} 

注意:“組件”來自Spring框架,暫時可以忽略。

在 faces-config.xml 中:

<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

在登錄頁面中,我在里面使用“#{users.}”。 對於這種情況,登錄工作正常(使用 Spring 安全性進行)。 我還創建了一個“注冊”頁面,在那里,我需要帶有請求 scope 的“用戶”bean 在數據庫“#{newUser.}”中創建一個新用戶。 我在一個方法里面放了一個斷點,當應用停在那里的時候,這個object的所有屬性都是null,應用拋出一個NullPointerException。

2.從Users.java中移除注解“ManagedBean”和“SessionsScoped”,並在faces-config.xml中聲明2個托管bean:

<managed-bean>
    <managed-bean-name>currentUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

當然,這次我在登錄頁面和歡迎頁面“#{currentUser.}”中使用。 這一次,在兩種情況下(登錄和注冊)都會拋出 NullPointerException。

文件 faces-config.xml 已加載。 I tested this by creating a class TempBean.java with 1 attribute and 1 method, declaring a managed bean of this class in faces-config.xml and use this in ah:form. 有效。

我擴展了“用戶”class,就像 Selaron 在評論中所說的那樣。 它工作正常。 但我認為在實際應用程序中這樣做並不是一個好主意,但目前我沒有更好的主意。

暫無
暫無

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

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