【问题标题】:JSF Primefaces datatable doesn't show the right valuesJSF Primefaces 数据表未显示正确的值
【发布时间】:2014-12-23 16:23:02
【问题描述】:

我对 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();
    }

}

道:

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;

    }
    ...
}

【问题讨论】:

  • 注释 @Named (Java EE) 和 @ManagedBean (JSF) 混合是否有意义?

标签: jsf primefaces datatable


【解决方案1】:

您需要在表格中使用来自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.&lt;attribute&gt;},您始终显示已修复的值。而且,现在您不需要 bean 本身中的这些属性,只需要列表(当然,除非您需要它们用于其他目的)。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2014-12-20
    • 2012-10-30
    相关资源
    最近更新 更多