Java 在spring框架的PrimeFaces数据表中,泛型类型列表每次都显示相同的值。我通过循环将组件添加到列表中
当我想通过getListPortfolio()方法在datatable中显示数据时,它会多次显示最后的附加值 这是创建方法的ManageBean。代码如下Java 在spring框架的PrimeFaces数据表中,泛型类型列表每次都显示相同的值。我通过循环将组件添加到列表中,java,spring,primefaces,Java,Spring,Primefaces,当我想通过getListPortfolio()方法在datatable中显示数据时,它会多次显示最后的附加值 这是创建方法的ManageBean。代码如下 @Controller @ManagedBean @SessionScoped @Transactional public class MbPortfolio { @Autowired Portfolio portfolio; @Autowired TransactionService transacti
@Controller
@ManagedBean
@SessionScoped
@Transactional
public class MbPortfolio {
@Autowired
Portfolio portfolio;
@Autowired
TransactionService transactionService;
public Portfolio getPortfolio() {
return portfolio;
}
public void setPortfolio(Portfolio portfolio) {
this.portfolio = portfolio;
}
public TransactionService getTransactionService() {
return transactionService;
}
public void setTransactionService(TransactionService transactionService) {
this.transactionService = transactionService;
}
public List<Portfolio> getListPortfolio() {
List <Transaction> lst = transactionService.clientPortfolio();
System.out.println(lst.size()+ "lkdlkdkgfkldglkfkljfljklkgfl");
List <Portfolio> lst2=new ArrayList<Portfolio>();
for (int i = 0; i < lst.size(); i++) {
portfolio.setShareCode(lst.get(i).getClient().getClientName());
lst2.add(portfolio);
}
return lst2;
}
}
它多次显示最后添加的名称。请帮助我。for(inti=0;ifor (int i = 0; i < lst.size(); i++) {
portfolio.setShareCode(lst.get(i).getClient().getClientName());
lst2.add(portfolio);
}
setShareCode(lst.get(i.getClient().getClientName());
lst2.增加(投资组合);
}
-在这里,您总是将相同的对象添加到列表中。您可能认为您正在添加对象的副本,但实际上您正在添加引用。因此,这里发生的是每次迭代,您更改对象,然后在列表中为其添加另一个引用
- 在第一次迭代中,您将
的portfolio
设置为第一个客户名称,然后将其添加到列表中shareCode
- 现在您有了一个列表,其中一个条目具有第一个客户机的名称
- 在第二次迭代中,您将
的组合
设置为第二个客户端名称共享代码
- 这与您在第一次迭代中使用的对象相同,并且存储在列表中,因此访问列表的第一个值时,您将看到第二个客户机名称
- 然后再次将
添加到列表中,现在列表中有两个条目都列出了第二个客户名称portfolio
getListPortfolio()
有什么关系?为什么在该方法中使用它?事务类类型列表的getListPortfolio()
返回列表。我想得到一个Portfolio
type列表,其中的值将从Transaction
type列表中设置。但是为什么要使用autowiredPortfolio
实例呢?我担心你实际上没有减少依赖项,而是在你的代码中添加了一个不存在的依赖项-你的getListPortfolio()
现在取决于投资组合的注入实例
——注入实例真正代表什么?我建议你后退一步,考虑一下你的代码应该做什么。只有当依赖项是真实的、有意义的、与您要解决的问题有一定关系的对象时,才注入依赖项。
for (int i = 0; i < lst.size(); i++) {
portfolio.setShareCode(lst.get(i).getClient().getClientName());
lst2.add(portfolio);
}