2012-08-01 70 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

感謝大家的幫助,原諒我的英語,我希望這種反應幫助別人