0

JavaEE6 や JSF2.0 などの Suns-RI を使用する GlassFish v3 でアプリケーションを開発しています。悪い点は、Suns RI からの変更/切り替えができないことです (MyFaces などを使用するため)。 .

さて、問題は、HtmlDatatable を手動で (Java コードで) ビルドしたいということです。データテーブルは java.util.Map を表す必要があります。最初の列にはキーが表示され、2 番目の列にはマップの値が表示されます。

java.util.List から PanelGrid を正常に構築し、UIComponent の「setExpressionValue」メソッドを毎回使用して、UI を基礎となるリストにバインドしました。

しかし今、これはマップでは機能しません。ここに私のコードのスニペットがあります:

public HtmlDataTable getEntityDetailsDataTable() {
...
Application app = FacesContext.getCurrentInstance().getApplication();
HtmlDataTable component = (HtmlDataTable)app.createComponent(HtmlDataTable.COMPONENT_TYPE);
component.setValueExpression("value", ExpressionUtil.createValueExpression("#{entityTree.entity."+fieldName+".entrySet()}", Map.class));
component.setVar("param");
UIColumn column = new UIColumn();
UIOutput label1 = DynamicHtmlComponentCreator.createHtmlOutputText("#{param[key]}", String.class);
column.getChildren().add(label1);
UIOutput label2 = DynamicHtmlComponentCreator.createHtmlOutputText("#{param[value]}", String.class);
column.getChildren().add(label2);
component.getChildren().add(column);
...
return component;
}
component.getChildren().add(column);
...
return component;
}

したがって、さらに問題は、このコードがマップのコンテンツのみを出力することです。別のページでは、HtmlInputText 要素に表示される値と、ユーザーが「保存」ボタンをクリックするとマップ全体が更新される必要があります。
したがって、さらに問題は、このコードがマップのコンテンツのみを出力することです。別のページでは、HtmlInputText 要素に表示される値と、ユーザーが「保存」ボタンをクリックするとマップ全体が更新される必要があります。

回避策がある場合は、マップをリストとして表現します...助けてください。これは(2つのリストとしてマップ)、基になるマップ/データベースモデルを再度更新する方法がわからないためです。

うまくいけば、誰かが私を助けることができます....

4

1 に答える 1

1

コンポーネントは、インデックスによって要素を取得/設定する方法を提供しないためUIData、a を反復処理できません。SetJSFページで直接コーディングした場合も機能しません。Listまたはに置き換えますDataModel

于 2010-04-27T11:25:52.980 に答える