2
對JSF創建託管bean的順序有任何保證嗎?JavaServer Faces Bean實例化順序
我的情況幾乎如下: 我有2個豆,我在同一頁中使用。創建第二個時,我希望它從第一個獲取一些信息,例如在其@PostConstruct方法中(以避免碰到數據庫)。
有沒有什麼辦法可以確保第一個bean實際上是在第二個之前創建的,所以讓數據成功?
對JSF創建託管bean的順序有任何保證嗎?JavaServer Faces Bean實例化順序
我的情況幾乎如下: 我有2個豆,我在同一頁中使用。創建第二個時,我希望它從第一個獲取一些信息,例如在其@PostConstruct方法中(以避免碰到數據庫)。
有沒有什麼辦法可以確保第一個bean實際上是在第二個之前創建的,所以讓數據成功?
您可以通過注入一個bean作爲另一個bean的託管屬性來確保這一點。
假設你已經在JSF 2.0,使用@ManagedProperty
:
@ManagedBean
@RequestScoped
public class FirstBean {
// ...
}
@ManagedBean
@RequestScoped
public class SecondBean {
@ManagedProperty(value="#{firstBean}")
private FirstBean firstBean; // +setter
@PostConstruct
public void init() {
// firstBean is available here.
}
// ...
}
或者當你還在JSF 1.2,使用<managed-property>
在faces-config.xml
:
<managed-bean>
<managed-bean-name>firstBean</managed-bean-name>
<managed-bean-class>com.example.FirstBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>secondBean</managed-bean-name>
<managed-bean-class>com.example.SecondBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>firstBean</property-name>
<value>#{firstBean}</value>
</managed-property>
</managed-bean>
謝謝,這是有效的。 (我很確定我已經知道,在某些時候:)) 除了這個,是以隨機順序構造的bean? – 2011-03-25 13:40:56
不,它們是在UI組件樹中按照EL表達式的順序構造的,它們僅在所需範圍內都不存在時才構造。 – BalusC 2011-03-25 13:47:58
好的,有道理。非常感謝。 – 2011-03-25 14:50:11