2010-04-27 3 views
0

Я разрабатываю приложение на GlassFish v3, которое использует Suns-RI JavaEE6 и JSF2.0 и т. Д. И плохо то, что никакие изменения/отключение от Sun RI не может быть (использовать MyFaces или что-то в этом роде).java.util.Map с HtmlDataTable

Проблема в том, что я хочу построить HtmlDatatable вручную (в Java-коде). Datatable должен представлять java.util.Map, где первый столбец должен отображать ключ, а второй - значения карты.

Я успешно создал PanelGrid из java.util.List и использовал каждый раз, когда методы setExpressionValue UIComponent связывают пользовательский интерфейс с базовым списком.

Но теперь это не работает с Картой. Вот отрывок из моего кода:

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, и вся карта обновляется, если пользователь нажимает кнопку i.e. «Сохранить».

Если есть временное решение, чтобы представить карту как список ... пожалуйста, помогите мне, потому что для этого (карта как 2 списка) я не знаю, как обновить базовую модель карты/базы данных.

Будем надеяться, что кто-то может мне помочь ....

ответ

1

В UIData компоненты не могут перебрать Set, так как он не обеспечивает способы получения/установки элементов по индексу. Это также не сработало бы, если бы вы закодировали его прямо на странице JSF. Замените его на List или DataModel.

+0

Теперь я реализовал собственный класс KeyValuePair, объекты которого хранятся в списке. Запрос ключей не так быстр, но на данный момент он работает. Благодаря BalusC! – gerry

Смежные вопросы