Primefaces-JSF,列表中的数据无法显示在p:datatable中

时间:2012-08-01 12:44:38

标签: jsf java-ee primefaces

我有一个用户列表,我希望使用primeface p:datatable在JSF页面中显示。我没有例外,但我无法显示列表中的数据,即使列标题未显示,实际上,我使用'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,  谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我在@luiggi的评论中通过<h:column>更改了<p:column>并且工作正常,所以谢谢。 我还将托管bean从@RequestScoped更改为@ViewScoped

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

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

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

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