JSFbean注入-如何传递值
我面临着通过注入将值从一个bean传递到另一个bean的问题 程序结构:用户搜索比萨,程序生成比萨对象并将其添加到“结果”列表中。现在我想把这个列表传递给bean PizzaResult 我的ManagedBean如下所示:JSFbean注入-如何传递值,jsf,javabeans,code-injection,Jsf,Javabeans,Code Injection,我面临着通过注入将值从一个bean传递到另一个bean的问题 程序结构:用户搜索比萨,程序生成比萨对象并将其添加到“结果”列表中。现在我想把这个列表传递给bean PizzaResult 我的ManagedBean如下所示: @ManagedBean @SessionScoped public class PizzaSearch { // variables private List<PizzaObject> results = new ArrayList<Pizz
@ManagedBean
@SessionScoped
public class PizzaSearch {
// variables
private List<PizzaObject> results = new ArrayList<PizzaObject>();
// methods to search for different pizzas
// methods to fill the list of PizzaObjects
// getter - setter
public List<PizzaObject> getResults() {
return results;
}
@ManagedBean
@会议范围
公共类比萨饼搜索{
//变数
私有列表结果=新建ArrayList();
//搜索不同比萨饼的方法
//填充Pizza对象列表的方法
//吸气剂设定器
公共列表getResults(){
返回结果;
}
另一个bean的代码段:
@ManagedBean
@SessionScoped
public class PizzaResult {
// injection
@ManagedProperty(value="#{pizzaSearch}")
private PizzaSearch pizzaSearch;
// variables
private List<PizzaObject> results;
@PostConstruct
public void initResults() {
results = pizzaSearch.getResults(); // results = empty
int size = results.size(); // size = 0
this._chosenSize = new int[size]; // chosenSize = 0
this._chosenQuantity = new int[size]; // chosenQuantity = 0
}
public void addToCart(int index) {
System.out.println("Parameter: " + results.get(index).getPizza().getPizzaID());
System.out.println("chosen size: " + getChosenSize()[index]);
System.out.println("chosen quantity: " + getChosenQuantity()[index]);
}
// getter and setter
@ManagedBean
@会议范围
公营比萨饼{
//注射
@ManagedProperty(value=“#{pizzaSearch}”)
私人比萨搜索比萨搜索;
//变数
私人名单结果;
@施工后
公共结果(){
results=pizzaSearch.getResults();//results=empty
int size=results.size();//size=0
这个。_chosenSize=new int[size];//chosenSize=0
这个。_chosenQuantity=new int[size];//chosenQuantity=0
}
公共void addToCart(整数索引){
System.out.println(“参数:”+results.get(index.getPizza().getPizzaID());
System.out.println(“所选大小:+getChosenSize()[index]);
System.out.println(“所选数量:+getChosenQuantity()[index]);
}
//接二连三
我需要在PostConstruct中初始化结果,但不知何故,每个值都是0。- 为了清楚起见,您可以像这样指定ManagedBean的名称吗
(即使默认情况下已完成)@ManagedBean(name=“pizzaSearch”)
- 检查会话范围的导入,它应该是
而不是import javax.faces.bean.SessionScoped;
,请参阅有关这两者之间差异的更多信息import javax.enterprise.context.SessionScoped;
或者您可以使用@Inject注释: 基于CDI的bean定义
javax.enterprise.context.SessionScoped //for bean scoping
javax.inject.Named //for bean declaration
javax.inject.Inject //for injection
因此,要将您的PizzaSearch managedBean注入PizzaResult,请执行以下操作:
在比萨饼搜索中
@Named
@SessionScoped
public class PizzaSearch {
// your code here
@Named
@SessionScoped
public class PizzaResult {
@Inject
PizzaSearch pizzaSearch;
//code here
对于比萨饼结果
@Named
@SessionScoped
public class PizzaSearch {
// your code here
@Named
@SessionScoped
public class PizzaResult {
@Inject
PizzaSearch pizzaSearch;
//code here
还有另一种方法,如果您使用SessionScoped,那么您可以通过使用FacesContext来获取当前的PizzaSearch实例。默认情况下,java.util.List为空。如果您创建
PizzaSearch
,它将使用新的相应空ArrayList启动。因此,输出是正确的。您介意指出您期望lis的位置吗t要填写?PizzaObject的加载应该发生在哪里?顺便说一句,您使用了两次ClassNamePizzaSearch
。通过将代码翻译并写入本主题,加倍的类名是一个错误。PizzaSearch和PizzaResult应该是正确的。但这正是我的问题。如果不在PostConstructor中?您在第一个bean中的列表填充在哪里?我敢说它只是一个空列表。那么,您如何期望值不是0,当然是0。@Omoro看看我在第一个片段中写的://填充PizzaObject列表的方法.肯定有一种方法可以填充列表,当然也会使用它..但我不知道如何将此列表传递给第二个bean。