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

时间:2014-04-18 10:03:10

标签: jsf jsf-2 primefaces

我有一个问题,我在wildfly8(jboss 8)服务器上使用Primefaces 4.0。

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

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

日志中没有错误。

我还试图在本地服务器上部署我部署到远程服务器的maven构建耳朵,并且本地工作正常。显然远程服务器上有一些区别,但我看不出它是什么,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;
}

 ......
 }

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题

在wildfly 8.0 FINAL版本中看起来standalone.xml已经改变了,localy我从20.2.2014获得了8.0 FINAL,在服务器上我从2014年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>

不是这个标志的作用,但是在插入这个文本之后,这个表面的表格已经充满了数据。