Primefaces LazyDataModel在本地产生的输出与在远程服务器上产生的输出不同



我在wildfly8(jboss 8)服务器上使用Primefaces 4.0时遇到问题。

我在本地有相同的服务器,与在生产中部署应用程序的远程服务器具有相同的设置。

当我将应用程序部署到远程服务器时,p:dataTable为空。只有使用素数面LazyDataModel的表是空的。

日志中没有错误。

我还尝试将我部署到远程服务器的maven构建ear部署在本地服务器上,并且在本地正常工作。显然,远程服务器上有一些差异,但我看不出可能是什么,standalone.xml在本地和远程上是相同的

有任何迹象表明是什么导致了这种奇怪的行为?

我已经打印了一些结果,看看代码中发生了什么,在count方法中,我得到了4520的返回,所以SQL运行正常,问题是在xhtml中,如果我把#{billsBean.billsData.rowCount}放在数据应该在的表之前,我得到0。在本地机器上,对于相同的视图和相同的代码,我得到4520

因此,看起来数据在表的渲染过程中丢失了。

@Named
@Stateless
public class LazyBillsDataModel extends LazyDataModel<Bill> implements Serializable {
private static final long serialVersionUID = -6488655263171321725L;
@Inject
@DomainsDB
private EntityManager em;
@EJB
BillHandler billHandler;
@Inject private Logger log;
public LazyBillsDataModel() {
    super();
}
@Override
public List<Bill> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
    System.out.println(">>>>>>>> enetering load data for BILLS");
    log.debug(">>>>>>>> enetering load data for BILLS");
    if (sortField == null || sortField.equals("")) {
        sortField = "bill.dateCreate";
    }
    List<Bill> data = selectData(first, pageSize, sortField, DataUtilsWeb.transformSortOrder(sortOrder), filters);
    // row count
    this.setRowCount(count(filters));
    return data;
}
private int count(Map<String, String> filters) {
    String hql = "select count(bill.idBill) from Bill bill ";
    if (filters != null && filters.size() > 0) {
        hql += " where " + prepereWhereFilters(filters);
    }
    Query query = em.createQuery(hql);
    fillQueryWitkFilterData(query, filters);
    System.out.println(">>>>>>>> count " + ((Long) query.getSingleResult()).intValue());
    return ((Long) query.getSingleResult()).intValue();
}
@SuppressWarnings("unchecked")
private List<Bill> selectData(int first, int pageSize, String sortField, String sortOrder, Map<String, String> filters) {
    List<Bill> data = new ArrayList<Bill>();
    String hql = "select bill from Bill bill left join fetch bill.organization left join fetch bill.billType left join fetch bill.billStatus ";
    if (filters != null && filters.size() > 0) {
        hql += " where " + prepereWhereFilters(filters);
    }
    // sorting
    if (sortField != null && !sortField.equals("")) {
        hql += " order by " + sortField;
        if (sortOrder != null && !sortOrder.equals("")) {
            hql += " " + sortOrder;
        }
    }
    Query query = em.createQuery(hql);
    fillQueryWitkFilterData(query, filters);
    // define query boundaries
    query.setFirstResult(first);
    query.setMaxResults(pageSize);
    data = (List<Bill>) query.getResultList();
    System.out.println(">>>>>>>> BILLS laoded num : " + data.size());
    log.debug(">>>>>>>> BILLS laoded num : " + data.size());
    return data;
}
 ......
 }

我已经解决了问题

在wildfly 8.0 FINAL版本中,standalone.xml似乎发生了变化,在本地,我从2014年2月20日开始使用8.0 FINAL,在服务器上,我从14年4月18日开始使用 8.0 FINAL

在比较了两台服务器的standalone.xml后,他们发现不同

所以我开始合并它们,我发现ejb3子系统中缺少这一部分

 <subsystem xmlns="urn:jboss:domain:ejb3:2.0>
  <stateless>
       <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
  </stateless>

不知道这个标志的作用,但在插入这个文本后,primffaces表显示出了完整的数据。

相关内容

  • 没有找到相关文章

最新更新