2012-08-01 71 views
0

我有一个用户列表,我想用JSF页面显示使用基线p:datatable。我没有例外,但我不能显示列表中的数据,即使列标题没有显示,实际上,我使用'getUserListe()'方法从数据库中调用我的服务层的数据为当然,我添加了一些userDomain属性(我的模型类)的sysprint(),当我访问URL时,我想用UserListe中的数据填充我的数据表,因此我通过value="#{userMB.userListe}"来调用它,问题是该列表不显示。但是当页面被收费时,意味着getUserListe()被调用,在我的控制台中,proprities被打印成功,有人对此有任何想法? :Primefaces- JSF,列表中的数据不能显示在p:datatabe

我的托管bean的一部分:我jsf.xhtml文件

@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; 
     } 

部分:

<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和他的财产的制定者正确地设置好的, 感谢您的帮助

+1

''和'工作'将其更改为''。使你的bean @ViewScoped并将你的'getUserListe'的业务逻辑移动到另一个方法,读取[在jsf页面和托管bean之间,为什么getter方法被调用两次](http://stackoverflow.com/a/2788213/1065197) – 2012-08-01 14:40:28

+0

Luiggi说得没错,使用ap:column会解决它,你应该加载一次数据,而不是每次请求值。 – 2012-08-01 15:18:59

+0

谢谢@LuiggiMendoza为你的答案,你是对的,而Daniel,我怎么才能加载数据只有一次,是由“onload”属性还是什么?非常感谢您的帮助。 – maouven 2012-08-01 15:56:36

回答

0

我做了@luiggi在他的评论中说,通过更改<h:column><p:column>它的工作很好,s o谢谢。 我也将我的托管bean从@RequestScoped更改为@ViewScoped

我想添加和分享给你的另一件事是,我在阅读了这篇文章的评论之后做了一些研究,所以我找到了另一种似乎比别人更好的解决方案,只有一次加载列表,这是由听众连接到一个系统事件,所以在我的JSF文件我加

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

loadUserListe()方法在我的豆调用业务逻辑代码实例的用户列表。 当然,jsf页面被包含在f:视图中。还要注意的是,使用这个监听器至少需要JSF 2.0

感谢大家的帮助,原谅我的英语,我希望这种反应帮助别人