Tôi có một bó của eagerApplicationScoped
đậu được quản lý. Một số người trong số họ được tiêm vào những người khác bằng cách chú thích ManagedProperty
, tạo thành một cây phụ thuộc. Mỗi bean phụ thuộc thao tác với cha mẹ của nó sau khi xây dựng.Ứng dụng EagerSố đậu được quản lý được kiểm tra được xây dựng nhiều lần
Tuy nhiên, có vẻ như một phiên bản mới được tạo cho mỗi lần tiêm, do đó thực hiện các thao tác trước đó sẽ hoàn tác. Theo hiểu biết của tôi, chỉ nên tạo một hạt ApplicationScoped
một lần. Tôi đã hiểu lầm hay tại sao điều này lại xảy ra? Có phải vì họ háo hức không?
Dưới đây là một ví dụ:
ParentBean.java
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean(eager = true)
@ApplicationScoped
public class ParentBean
{
static int initCount = 0;
// ...
@PostConstruct
public void init()
{
++initCount; // Will end up being between 1 and 3. Expected always 1.
// ...
}
}
Child1Bean.java
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child1Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
Child2Bean.java
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child2Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
bạn có thể đưa ra ví dụ về cách bạn làm điều đó không? –
OK, tôi đã thêm một ví dụ. – Spomf
đừng nghĩ rằng tôi sẽ thực hiện bất kỳ thay đổi nào, nhưng hãy thử '@ManagedProperty (value =" # {parentBean} ")', – Daniel