java generated extendedDataTable inside modalPanel
jocky Dec 1, 2010 5:49 AMRichfaces 3.3.3
Tomcat 7.0
I'm having problem when generating rich:extendeddatatable inside modalPanel, and i'm doing this dynamicaly from java code. Here is the example:
<h:panelGrid id="parametersGrid" columns="2"
styleClass="reportParametersGrid"
columnClasses="reportParameterLabel,reportParameterField"
binding="#{coreIzvestajController.parametriGrid}" />
public UIComponent createModalPanel(ModalPanelParameters modalPanelParameters) {
String name = modalPanelParameters.getName();
String id = name+"LovModalPanel";
String nameVeliko = getStringUtil().prvoSlovoVeliko(name);
String header = "coreLabela"+nameVeliko+"LovModalPanelHeader";
String tableName = "tabela"+nameVeliko;
String controller = name+"SelectionController";
String datamodel = name+"DataTableModelApi";
String tableValue = controller+"."+datamodel;
String tableAction = controller+".handleSelection";
String dugmeId = name+"DugmeOdaberi";
HtmlModalPanel htmlModalPanel = new HtmlModalPanel();
htmlModalPanel.setId(id);
htmlModalPanel.setAutosized(true);
htmlModalPanel.setResizeable(false);
htmlModalPanel.setMoveable(true);
htmlModalPanel.setMinWidth(600);
Map<String, UIComponent> facets = htmlModalPanel.getFacets();
HtmlOutputText htmlOutputText = new HtmlOutputText();
htmlOutputText.setValue(getMessage(header));
facets.put("header", htmlOutputText);
HtmlHotKey htmlHotKey = new HtmlHotKey();
htmlHotKey.setKey("backspace");
htmlHotKey.setHandler("return false;");
htmlHotKey.setDisableInInput(true);
htmlModalPanel.getChildren().add(htmlHotKey);
HtmlExtendedDataTable htmlExtendedDataTable = new HtmlExtendedDataTable();
htmlExtendedDataTable.setId(tableName);
htmlExtendedDataTable.setStyle("margin: auto;");
htmlExtendedDataTable.setHeight("310px");
htmlExtendedDataTable.setWidth("800px");
htmlExtendedDataTable.setRows(10);
htmlExtendedDataTable.setEnableContextMenu(false);
htmlExtendedDataTable.setNoDataLabel(getMessage("commonNoDataLabel"));
htmlExtendedDataTable.setValueExpression("value", createValueExpresion(tableValue,OsbOsobaDataTableModelApi.class));
htmlExtendedDataTable.setVar(name);
htmlExtendedDataTable.setSortMode("single");
htmlExtendedDataTable.setSelectionMode("single");
htmlExtendedDataTable.setValueExpression("selection", createValueExpresion("coreIzvestajController.selection", SimpleSelection.class));
htmlExtendedDataTable.setRowKeyVar("rkvar");
htmlExtendedDataTable.setValueExpression("tableState", createValueExpresion("coreIzvestajController.tableState"));
HtmlAjaxSupport htmlAjaxSupport = new HtmlAjaxSupport();
htmlAjaxSupport.setEvent("onRowClick");
htmlAjaxSupport.setActionExpression(createExpresion(tableAction));
htmlAjaxSupport.setReRender(dugmeId);
htmlExtendedDataTable.getChildren().add(htmlAjaxSupport);
HtmlColumn htmlColumn = new HtmlColumn();
htmlColumn.setId("column1ime");
htmlColumn.setWidth("50%");
HtmlOutputText columnLabel = new HtmlOutputText();
columnLabel.setValue("ime");
htmlColumn.setHeader(columnLabel);
HtmlOutputText htmlOutputText2 = new HtmlOutputText();
String value = name+".ime";
htmlOutputText2.setValueExpression("value", createValueExpresion(value));
htmlColumn.getChildren().add(htmlOutputText2);
htmlExtendedDataTable.getChildren().add(htmlColumn);
HtmlColumn htmlColumn2 = new HtmlColumn();
htmlColumn2.setId("column1ime");
htmlColumn2.setWidth("50%");
HtmlOutputText columnLabel2 = new HtmlOutputText();
columnLabel2.setValue("prezime");
htmlColumn2.setHeader(columnLabel2);
HtmlOutputText htmlOutputText3 = new HtmlOutputText();
String value2 = name+".prezime";
htmlOutputText3.setValueExpression("value", createValueExpresion(value2));
htmlColumn2.getChildren().add(htmlOutputText3);
htmlExtendedDataTable.getChildren().add(htmlColumn2);
htmlModalPanel.getChildren().add(htmlExtendedDataTable);
HtmlSpacer spacer = new HtmlSpacer();
spacer.setWidth("5");
htmlPanelGroup.getChildren().add(spacer);
HtmlAjaxCommandButton odustaniCommandButton = new HtmlAjaxCommandButton();
odustaniCommandButton.setStyleClass("button buttonImageCancel");
odustaniCommandButton.setValue(getMessage("common_odustani"));
odustaniCommandButton.setOnclick("Richfaces.hideModalPanel('"+id+"');");
htmlPanelGroup.getChildren().add(odustaniCommandButton);
htmlModalPanel.getChildren().add(htmlPanelGroup);
return htmlModalPanel;
}
Exception:
java.lang.NullPointerException at org.richfaces.component.ColumnsOrder.getColumnIndex(ExtendedDataTableState.java:425) at org.richfaces.component.ColumnsOrder.access$000(ExtendedDataTableState.java:347) at org.richfaces.component.ColumnsOrder$1.compare(ExtendedDataTableState.java:475) at org.richfaces.component.ColumnsOrder$1.compare(ExtendedDataTableState.java:474) at java.util.Arrays.mergeSort(Arrays.java:1270) at java.util.Arrays.sort(Arrays.java:1210) at java.util.Collections.sort(Collections.java:159) at org.richfaces.component.ColumnsOrder.sortColumns(ExtendedDataTableState.java:473) at org.richfaces.component.ExtendedDataTableState.sortColumns(ExtendedDataTableState.java:144) at org.richfaces.component.UIExtendedDataTable.getSortedChildren(UIExtendedDataTable.java:150) at org.richfaces.component.SortedColumnsIterator.<init>(SortedColumnsIterator.java:41) at org.richfaces.component.UIExtendedDataTable.getSortedColumns(UIExtendedDataTable.java:134) at org.richfaces.renderkit.AbstractExtendedTableRenderer.encodeColumns(AbstractExtendedTableRenderer.java:130) at org.richfaces.renderkit.html.ExtendedDataTableRenderer.doEncodeBegin(ExtendedDataTableRenderer.java:262) at org.richfaces.renderkit.html.ExtendedDataTableRenderer.doEncodeBegin(ExtendedDataTableRenderer.java:196) at org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100) at org.richfaces.renderkit.AbstractExtendedTableRenderer.encodeBegin(AbstractExtendedTableRenderer.java:1365) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813) at javax.faces.component.UIData.encodeBegin(UIData.java:962) at org.ajax4jsf.component.UIDataAdaptorBase.encodeBegin(UIDataAdaptorBase.java:1225) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:934) at javax.faces.render.Renderer.encodeChildren(Renderer.java:148) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277) at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeChildren(ModalPanelRenderer.java:368) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeChildren(ModalPanelRenderer.java:363) at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:234) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:239) at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:178) at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:126) ...
The problem seems to be when processing columns for datatable because plain table whithout columns is displayed properly. Also if i put the same code for datatable outside modal panel, the table and columns are also displayed fine !
Any ideas ?