2013-03-14 4 views
3

Я использую Java и icefaces, мне нужно построить таблицу, которая будет иметь разное количество столбцов каждый раз.Строка таблицы html с различным количеством столбцов

До сих пор лучший пример я нашел на the icefaces website

Я попытался дать число столбцов быть динамичным, но я не знаю, как получить значение ячейки на странице HTML. Вот мой код:

Мой боб:

public class DynamicColumnsBean implements Serializable { 

int randomRows ; 
int randomCol ; 

List<Task> data; // rows data 
List<ColumnModel> columns ; 


public DynamicColumnsBean() { 
    super(); 
    Random rn = new Random(); 
    randomRows = rn.nextInt() % 40; 
    randomCol = rn.nextInt() % 30; 

    if(randomRows==0) randomRows=10; 
    if(randomCol==0) randomCol=7; 
    if(randomRows<0) randomRows*=-1; 
    if(randomCol<0)  randomCol*=-1; 

    columns = new ArrayList<ColumnModel>(); 
    for (int i=0 ; i< randomCol ; i++) 
    { 
     columns.add(new ColumnModel(i, "ID "+ i +" ")); 
    } 

    data = new ArrayList<Task>() ; //row objects 

    for (int i=0 ; i< randomRows ; i++) 
    { 
     List<String> obj = new ArrayList<String>() ; 
     for (int j=0 ; j< randomCol ; j++) 
     { 
      obj.add("row "+i +" col "+j); 
     } 
     Task temp = new Task(obj); 
     data.add(temp); 
    } 

} 



    public List<Task> getData() 
    {   return data;  } 
    public void setData(ArrayList<Task> data) 
    {   this.data = data;  } 
    public List<ColumnModel> getColumns() { 
     return columns;  } 
    public void setColumns(ArrayList<ColumnModel> columns) { 
     this.columns = columns;  } 
} 


public class Task { 

List<String> obj ; 


public Task() { 
     super(); 

    } 

public Task(List<String> obj) { 
    super(); 
    obj = new ArrayList<String>(); 
    this.obj = obj; 
} 

public List<String> getObj() { 
    return obj; } 

public void setObj(List<String> obj) { 
    this.obj = obj; } 
} 

public class ColumnModel { 
int value; // represents sortBy/filterBy as one field 
String headerText; 

public ColumnModel(int i, String headerText) { 
    this.value = i; 
    this.headerText = headerText; 
} 

public int getValue() { 
    return value; } 
public void setValue(int value) { 
    this.value = value; } 
public String getHeaderText() { 
    return headerText; } 
public void setHeaderText(String headerText) { 
    this.headerText = headerText; } 
} 
<ace:dataTable value="#{dynBean2.data}" var="row" scrollable="true" 
       height="200"  paginator="true" rows="5" > 
      <c:forEach items="#{dynBean2.columns}" var="col"> 
       <ace:column headerText="#{col.headerText}" style="width: 40px" > 

        <ice:outputText value=" #{row['obj'[col.value]]}"></ice:outputText> 

       </ace:column> 
      </c:forEach> 
     </ace:dataTable> 

Моя проблема с:

ice:outputText value=" #{row['obj'[col.value]]}" 

мне нужно значение, чтобы быть: получить данные в индексе я -> получить значение внутри объекта obj в индексе [col.value].

ответ

0

Вы можете попробовать с varStatus:

<c:forEach items="#{dynBean2.columns}" var="col" varStatus="colStatus"> 
    <ace:column headerText="#{col.headerText}" style="width: 40px" > 
    <ice:outputText value=" #{row.obj[colStatus.index]}"></ice:outputText> 
    </ace:column> 
</c:forEach> 
Смежные вопросы