Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring框架的PrimeFaces数据表中,泛型类型列表每次都显示相同的值。我通过循环将组件添加到列表中_Java_Spring_Primefaces - Fatal编程技术网

Java 在spring框架的PrimeFaces数据表中,泛型类型列表每次都显示相同的值。我通过循环将组件添加到列表中

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

当我想通过getListPortfolio()方法在datatable中显示数据时,它会多次显示最后的附加值

这是创建方法的ManageBean。代码如下

@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
      添加到列表中,现在列表中有两个条目都列出了第二个客户名称

事务也是一个bean,其中客户端是一个具有clientName属性的对象。它有getter和setter。公文包是自动连接的。那么,如何在列表中添加另一个引用@Jiri Tousek它与
getListPortfolio()
有什么关系?为什么在该方法中使用它?事务类类型列表的
getListPortfolio()
返回列表。我想得到一个
Portfolio
type列表,其中的值将从
Transaction
type列表中设置。但是为什么要使用autowired
Portfolio
实例呢?我担心你实际上没有减少依赖项,而是在你的代码中添加了一个不存在的依赖项-你的
getListPortfolio()
现在取决于
投资组合的注入实例
——注入实例真正代表什么?我建议你后退一步,考虑一下你的代码应该做什么。只有当依赖项是真实的、有意义的、与您要解决的问题有一定关系的对象时,才注入依赖项。
for (int i = 0; i < lst.size(); i++) {
    portfolio.setShareCode(lst.get(i).getClient().getClientName());
    lst2.add(portfolio);
}