私は Java と icefaces を使用しています。毎回異なる数の列を持つテーブルを作成する必要があります。
これまでのところ、私が見つけた最良の例はicefacesのWebサイトでした
列数を動的にしようとしましたが、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]]}"
値を次のようにする必要があります: インデックス i のデータを取得します --> インデックス [col.value] の obj 内の値を取得します。