0

我有一个要使用 primefaces 在 JSF 页面中显示的用户列表p:datatable。我也不例外,但是我无法将a拥有的数据显示到列表中,甚至没有显示列标题,事实上,我使用了'getUserListe()'从数据库中调用我的服务层获取数据的方法,可以肯定其中,我添加了一些userDomain属性(我的模型类)的 sysprint(),当我访问 URL 时,我想用来自 UserListe 的数据填充我的数据表,所以我调用它value="#{userMB.userListe}",问题是列表不显示。但是当页面被收费时,意味着 getUserListe() 被调用,在我的控制台中,属性被成功打印,有人对此有任何想法吗?:

我的托管 bean 的一部分:

@ManagedBean(name="userMB")
@RequestScoped
public class UserManagedBean implements Serializable {

        private List<UserDomain> userListe ;
    public List<UserDomain> getUserListe() {
            this.userListe = new ArrayList<UserDomain>();
            this.userListe.addAll(getUserServicee().getAll());
            for(UserDomain u : userListe)
                System.out.println(u.getFirstName());
            return userListe;
        }

        public void setUserListe(List<UserDomain> userListe) {
            this.userListe = userListe;
        }

我的 jsf.xhtml 文件的一部分:

<h:form>
        <h:outputText value="USER's rights list: "></h:outputText>
        <p:dataTable id="userss" var="userr" value="#{userMB.userListe}" style="width: 10%">

            <h:column>
                    <f:facet name="header"><h:outputText value="FirstName" /></f:facet>                     
                    <h:outputText value="#{userr.firstName}"  />                    
            </h:column>

            <h:column>
                    <f:facet name="header"><h:outputText value="LastName" /></f:facet>                  
                    <h:outputText value="#{userr.lastName}"  />                 
            </h:column>

            <h:column>                  
                    <f:facet name="header"><h:outputText value="Action" /></f:facet>                    
                    <h:commandLink value="Edit" action="#{userMB.editAction(userr)}"  />                
            </h:column>

        </p:dataTable> 

        <h:commandButton value="OK" action="#{userMB.userProp}" />
    </h:form>

请注意,我的用户已正确设置其属性的所有 getter 和 setter,谢谢您的帮助

4

1 回答 1

0

我按照@luiggi 在他的评论中所说的那样更改了<h:column>by<p:column>并且工作正常,所以谢谢。我还将我的托管 bean 从一个@RequestScoped更改为@ViewScoped一个。

我想添加并与您分享的另一件事是,我在阅读了这篇文章的评论后做了一些研究,所以我找到了一个似乎比其他人更好的解决方案,只加载一次列表,它是通过附加一个监听系统事件,所以在我的 jsf 文件中添加

<f:view>
    <f:event type="preRenderView" listener="#{userMB.loadUserListe}" />
...

我的 bean 中的loadUserListe()方法调用实例化用户列表的业务逻辑代码。当然,jsf 页面包含在 f:view 中。另请注意,使用此侦听器至少需要 JSF 2.0

谢谢大家的帮助,请原谅我的英语,我希望这个回答对其他人有帮助

于 2012-08-01T22:36:25.777 回答