JSF Primefaces数据表没有显示正确的值

时间:2014-12-23 16:23:03

标签: jsf primefaces datatable

我有关于primefaces数据表的问题。我从数据库中获取数据并将其保存在列表中。这很棒!但是数据表只显示一列而不是四列,并且每列都会复制此列。

<h:form id="userslistform">
        <p:dataTable id="userlist" var="users" value="#{userBean.usersList}"
            rowKey="#{userBean.username}">
            <p:column headerText="ID">
                <h:outputText value="#{userBean.id}" />
            </p:column>
            <p:column headerText="Username">
                <h:outputText value="#{userBean.username}" />
            </p:column>
            <p:column headerText="Firstname">
                <h:outputText value="#{userBean.firstname}" />
            </p:column>
            <p:column headerText="Surname">
                <h:outputText value="#{userBean.surname}" />
            </p:column>
        </p:dataTable>
    </h:form>

豆:

@Named
@SessionScoped
@ManagedBean(name = "userBean")
public class UserBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    private String firstname;
    private String surname;
    private Long id;
    private String email;
    private Long treeId;
    private Boolean isadmin;
    private List<User> usersList;
    private User selectedUser;

    private UserDataQuery query = new UserDataQuery();

    //getter and setters of every attribute
    ...

    @PostConstruct
    public void init() {
        usersList = query.getAllUsers();
    }

}

DAO:

public class UserDataQuery {

    private EntityManagerFactory enf;
    private EntityManager em;

    public UserDataQuery() {
        enf = Persistence.createEntityManagerFactory("xxxx");
        em = enf.createEntityManager();
        em.getTransaction().begin();
    }

    public List<User> getAllUsers() {

        List<User> usersList = em.createNamedQuery("User.findAll", User.class)
                .getResultList();

        return usersList;

    }
    ...
}

1 个答案:

答案 0 :(得分:3)

您需要使用表格中var的值来显示数据

<h:form id="userslistform">
    <p:dataTable id="userlist" var="users" value="#{userBean.usersList}"
        rowKey="#{userBean.username}">
        <p:column headerText="ID">
            <h:outputText value="#{users.id}" />
        </p:column>
        <p:column headerText="Username">
            <h:outputText value="#{users.username}" />
        </p:column>
        <p:column headerText="Firstname">
            <h:outputText value="#{users.firstname}" />
        </p:column>
        <p:column headerText="Surname">
            <h:outputText value="#{users.surname}" />
        </p:column>
    </p:dataTable>
</h:form>

var值表示在呈现表时对当前行的引用。使用#{userBean.<attribute>},您始终显示已修复的值。而且,现在你不需要bean本身的那些属性,只需要列表(当然,除非你需要它们用于其他目的)。