使用Hibernate,Spring无法在xhtml DataTable中显示数据

时间:2017-01-02 18:00:00

标签: java spring hibernate primefaces

我正在做一些显示数据的测试。我希望用户在唱完+看到他/她自己的用户名后看到其他用户的数据。所以基本上应用程序继续将用户保存到数据库并以另一种形式显示他自己的用户名。第二种形式无法在表格中显示其他用户名。我不知道该怎么做。我可以在try / catch块中以某种方式实现此方法吗?

Generic Dao界面:

package com.example.j2eeapp.dao;
import java.io.Serializable;
import java.util.List;

public interface Dao <T, ID extends Serializable> {
  T save (T entity);
  List<T> findAll();
  void flush();
}
道实施:

package com.example.j2eeapp.dao;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.example.j2eeapp.test.BasicView;

@Component
@Transactional
public abstract class DaoImpl <T, ID extends Serializable> implements Dao<T,ID> {

private Class<T> persistentClass;

private EntityManager entityManager;

public DaoImpl(Class<T> persistentClass) {
    this.persistentClass = persistentClass;
}

protected EntityManager getEntityManager() {
    return entityManager;
}

@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}

public Class<T> getPersistentClass() {
    return persistentClass;
}

public T save(T entity) {
    getEntityManager().persist(entity);
    return entity;
}
@SuppressWarnings("unchecked")
public List<T> findAll() {
    return getEntityManager()
        .createQuery("from " + getPersistentClass().getSimpleName() )
        .getResultList();
}

}
public void flush() {
    getEntityManager().flush();
}



public List<T> getfindUserName(){
    return findUserName();
}

}

xhtml表格:

   <?xml version="1.0" encoding="UTF-8" ?>
   <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    template="/WEB-INF/templates/general.xhtml">

<ui:define name="title"><h:outputText value="Success" /></ui:define>
<ui:define name="header"><h:outputText value="Success" /></ui:define>

<ui:define name="content">
    <h:form id="successForm">
        <p:fieldset styleClass="fieldset" legend="Succcess">


 <h:panelGrid columns="1" cellpadding="5">

    <h:outputText id="display" value="#{basicView.userName}" />

        <p:dataTable var="usersDetails" value="#{daoImpl.findAll}">
        <p:column headerText="Id">
          <h:outputText value="#{usersDetails.id}" />
        </p:column>

        <p:column headerText="User Name">
          <h:outputText value="#{usersDetails.userName}" />
        </p:column>

        <p:column headerText="Password">
          <h:outputText value="#{usersDetails.password}" />
        </p:column>

        <p:column headerText="Last name">
          <h:outputText value="#{usersDetails.lastName}" />
        </p:column>

        <p:column headerText="First name">
          <h:outputText value="#{usersDetails.firstName}" />
        </p:column>
    </p:dataTable>
</h:panelGrid>
        </p:fieldset>
    </h:form>
</ui:define>

enter image description here

1 个答案:

答案 0 :(得分:0)

没有深入检查代码,我认为你的数据表定义是错误的。

<p:dataTable var="usersDetails" value="#{daoImpl.findUserName}">
    <p:column headerText="Id">
      <h:outputText value="#{userDetails.userId}" />
    </p:column>

    <p:column headerText="User Nmae">
      <h:outputText value="#{userDetails.userName}" />
    </p:column>

    <p:column headerText="Password">
      <h:outputText value="" />
    </p:column>

    <p:column headerText="Last name">
      <h:outputText value="" />
    </p:column>

    <p:column headerText="First name">
      <h:outputText value="" />
    </p:column>
</p:dataTable>

#{daoImpl.findUserName}应该实际返回用户实体。

最佳

根据评论进行更新

没有找到记录基本上意味着,您的支持bean被调用但没有返回任何要显示的实体。

所以要么你在加载你的桌子时没有留下任何userDetails,要么你没有更新你桌子上的数据。

由于您使用的是素数I recommend you to take a look at the showcases they provide.

我还看到,您的数据表没有ID,这可能会导致麻烦:

<p:dataTable id="userDataTable" var="usersDetails" value="#{daoImpl.findUserName}">
    <p:column headerText="Id">
      <h:outputText value="#{userDetails.userId}" />
    </p:column>

    <p:column headerText="User Nmae">
      <h:outputText value="#{userDetails.userName}" />
    </p:column>

    <p:column headerText="Password">
      <h:outputText value="" />
    </p:column>

    <p:column headerText="Last name">
      <h:outputText value="" />
    </p:column>

    <p:column headerText="First name">
      <h:outputText value="" />
    </p:column>
</p:dataTable>