【问题标题】:unable to use datamodel with arraylist无法将数据模型与 arraylist 一起使用
【发布时间】:2014-04-10 15:20:03
【问题描述】:

我的数组列表是:

private static final ArrayList<Order> orderList = 
        new ArrayList<Order>(Arrays.asList(

        new Order("A0001", "Intel CPU", 
                new BigDecimal("700.00"), 1),
        new Order("A0002", "Harddisk 10TB", 
                new BigDecimal("500.00"), 2),
        new Order("A0003", "Dell Laptop", 
                new BigDecimal("11600.00"), 8),
        new Order("A0004", "Samsung LCD", 
                new BigDecimal("5200.00"), 3),
        new Order("A0005", "A4Tech Mouse", 
                new BigDecimal("100.00"), 10)
    ));

private final DataModel<Order> ordering = new ArrayDataModel<Order>(orderList);// this line shows error
    public DataModel<Order> getOrderListDataModel() {

        return ordering;

    }

JSF dataTable 不包含任何显示当前选定行号的方法。但是,我可以使用 javax.faces.model.DataModel 类破解它,它有一个 getRowIndex() 方法来返回当前选定的行号。

这个数组列表实际上以表格形式出现,我正在通过 JSF 进行。

我可以将它与我自己类型的 Array 一起使用,但不能与 arraylist 一起使用?

【问题讨论】:

  • 问题是什么?

标签: java jsf


【解决方案1】:

它需要一个数组,而不是一个列表作为参数。列表没有构造函数。也就是说,如果我们谈论的是javax.faces.model.ArrayDataModel

【讨论】:

    【解决方案2】:

    正确。

    正如the the Javadoc for ArrayDataModel 所示,它没有将List 作为参数的构造函数。它需要一个数组:

    ArrayDataModel(E[] 数组)

    构造一个包装指定数组的新 ArrayDataModel。

    改用ListDataModel

    private final DataModel<Order> ordering = 
        new ListDataModel<Order>(orderList);
    

    【讨论】:

      【解决方案3】:

      我希望你在谈论 javax/faces/DataModel http://docs.oracle.com/javaee/5/api/javax/faces/model/DataModel.html

      如果您想作为数据模型列出,请尝试使用 ListDataModel http://docs.oracle.com/javaee/5/api/javax/faces/model/ListDataModel.html

      在您的代码中尝试如下更改,

        private static final List<Order> orderList = 
              new ArrayList<Order>(Arrays.asList(
      
              new Order("A0001", "Intel CPU", 
                      new BigDecimal("700.00"), 1),
              new Order("A0002", "Harddisk 10TB", 
                      new BigDecimal("500.00"), 2),
              new Order("A0003", "Dell Laptop", 
                      new BigDecimal("11600.00"), 8),
              new Order("A0004", "Samsung LCD", 
                      new BigDecimal("5200.00"), 3),
              new Order("A0005", "A4Tech Mouse", 
                      new BigDecimal("100.00"), 10)
          ));
      
      private final DataModel<Order> ordering = new ListDataModel<Order>(orderList);// this line shows error
          public DataModel<Order> getOrderListDataModel() {
      
              return ordering;
      
          }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        相关资源
        最近更新 更多