2013-03-26 123 views
1

我想創建一個2列的PanelGrid,並從列表中加載數據。問題是它不會創建新的行。它只是將整個列表放在第一行。如何動態生成PanelGrid行? (JSF,Primefaces)

沒有與數據庫的通信。這僅僅是我需要顯示的列表,每個值都有一行。

這是我的panelGrid中的樣子:

 <p:panelGrid style="border:10px;"> 

       <p:row> 
        <p:column style="font-size:15px;font-weight:bold;">Column1</p:column> 
        <p:column style="font-size:15px;font-weight:bold;">Column2</p:column> 
       </p:row> 

       <p:row> 
        <p:column style="width:35%"> 
         <h:outputText value="#{myService.columnOne}" /> 
        </p:column> 
        <p:column style="width:35%"> 
         <h:outputText value="#{myService.columnTwo}" /> 
        </p:column> 
       </p:row> 

      </p:panelGrid> 

,這是我在MyService.java列表:

public List<String> columnOne = new ArrayList<String>(); 
public List<String> columnTwo = new ArrayList<String>(); 

,我只是在我的方法與

columnOne.add("String"); 
添加一些值

...

編輯

我已經通過改變我的Java邏輯,通過創建一個鍵值映射並將其顯示在數據表中來解決它。

回答

2

在編寫它時,它當然不會只產生兩行,一個用於標題,另一個包含兩個cols,它們將輸出columnOne.toString()columnTwo.toString()

必須有一些方法來顯示它們只在一個p:panelGrid。但是,如果您確定兩個列表的大小相同,則我認爲最佳方式(在Java代碼中優化並且不需要額外的代碼)是使用兩個p:panelGrid,它們中的每一個都將顯示一列。之後,您可以使用CSS進行遊戲,讓它們看起來像一張獨特的桌子。

基於您的評論,在這裏,我應該在我的方法做:二

<p:dataTable var="colValue" value="#{myService.columnOne}">  
    <p:column headerText="Column1"> 
     <h:outputText value="#{colValue}" /> 
    </p:column> 
</p:dataTable> 

柱就像是一列。

我沒有使用p:panelGrid避免使用c:forEach遍歷數據

+0

所以我在哪裏設置的列值?就像我在我的代碼中做的一樣? 它會爲每個值創建一行嗎? – Johnny2012 2013-03-26 09:44:04

+0

如果你願意使用我的方法,那麼我會使用p:datatable,看我編輯的答案 – 2013-03-26 09:48:20

+0

yor解決方案適用於我,但是不可能將兩列設置爲一個Datatable嗎?我真的必須爲每列創建兩個數據表嗎? – Johnny2012 2013-03-26 10:25:01

2

當你不與對迭代列表:panelGrid的 您應該使用像寶潔這樣一個迭代器:數據表或電話號碼:DataGrid中

並且#{myService.columnOne}將輸出對象columnOne,而不是其中的值。

在datagrid中定義一個var來迭代列表。

你應該定義類似這樣的東西;

<p:dataGrid style="border:10px;" value="#{myService.columnOne}" var="col" columns="3"> 
    <p:panel header="col" style="text-align:center"> 
    <h:outputText value="#{col}"/> 
    </p:panel>    
</p:dataGrid> 

和豆

public myservice() { 
     columnOne.add("String1"); 
     columnOne.add("String2"); 
     columnOne.add("String3"); 

     columnTwo.add("Something1"); 
     columnTwo.add("Something2"); 
     columnTwo.add("Something3"); 

    } 
public List<String> getColumnOne() { 
    return columnOne; 
} 
+0

這會爲每個值生成一列 – Johnny2012 2013-03-26 10:30:33

+0

這只是一個示例。顯然,提問者沒有(沒有)理解如何在JSF中迭代列表。所以我試圖解釋那部分。 – roel 2013-03-26 10:40:31