带有HtmlDataTable的java.util.Map

时间:2010-04-27 10:42:06

标签: java jsf datatable map jsf-2

我正在GlassFish v3上开发一个应用程序,该应用程序使用JavaEE6和JSF2.0等的Suns-RI。不好的是,没有更改/切换远离Suns RI(使用MyFaces或其他东西)像那样)。

现在,问题是,我想手工构建HtmlDatatable(在Java代码中)。数据表应该表示java.util.Map,其中第一列应显示键,第二列应显示地图的值。

我已经从java.util.List成功构建了一个PanelGrid,并且每当UIComponent的“setExpressionValue”方法将UI绑定到基础List时就会使用它。

但现在,这不适用于Map。以下是我的代码片段:

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;
}

所以,进一步的问题是,这个代码只打印出Map的内容,在另一个页面上我需要HtmlInputText元素中显示的值,如果用户点击一个即“保存”按钮,则更新整个地图。登记/> 所以,问题是,这个代码只打印出Map的内容,在另一个页面上我需要HtmlInputText元素中显示的值,如果用户点击了“保存”按钮,则更新整个地图。

如果有解决方法,要表示地图和列表......请帮助我,因为为此(地图为2个列表)我不知道如何再次更新基础地图/数据库模型。

希望有人可以帮助我......

1 个答案:

答案 0 :(得分:1)

UIData组件无法迭代Set,因为它没有提供按索引获取/设置元素的方法。当您在JSF页面中直接编码时,它也不起作用。将其替换为ListDataModel