Oi pessoal estou com um problema no datatable do richfaces esquisito.
Quando tento pegar a linha selecionada sempre fica nulo por que?
Segue o codigo.
package br.com.sigga.mb;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;
import org.ajax4jsf.component.html.HtmlAjaxCommandButton;
import org.ajax4jsf.component.html.HtmlAjaxSupport;
import org.richfaces.component.html.HtmlColumn;
import org.richfaces.component.html.HtmlDataTable;
public class DynamicDataTable {
// Init
// --------------------------------------------------------------------------------------
private static List<List<String>> dynamicList; // Simulate fake DB.
private static String[] dynamicHeaders; // Optional.
HtmlDataTable dynamicDataTable;
private List<String> item;
// Actions
// -----------------------------------------------------------------------------------
private void loadDynamicList() {
// Set headers (optional).
dynamicHeaders = new String[] { "ID", "Name", "Value" };
// Set rows. This is a stub example, just do your dynamic thing.
dynamicList = new ArrayList<List<String>>();
dynamicList.add(Arrays
.asList(new String[] { "ID1", "Name1", "Value1" }));
dynamicList.add(Arrays
.asList(new String[] { "ID2", "Name2", "Value2" }));
dynamicList.add(Arrays
.asList(new String[] { "ID3", "Name3", "Value3" }));
dynamicList.add(Arrays
.asList(new String[] { "ID4", "Name4", "Value4" }));
dynamicList.add(Arrays
.asList(new String[] { "ID5", "Name5", "Value5" }));
}
private void populateDynamicDataTable() {
HtmlForm form = new HtmlForm();
// Create <h:dataTable value="#{myBean.dynamicList}" var="dynamicItem">.
dynamicDataTable = new HtmlDataTable();
dynamicDataTable.setId("dataTable");
dynamicDataTable.setValueExpression("value", createValueExpression(
"#{dynamicDataTable.dynamicList}", List.class));
dynamicDataTable.setVar("dynamicItem");
//dynamicDataTable.getChildren().add(createAjaxSuporte());
dynamicDataTable.setRowClasses("row1, row2" );
//dynamicDataTable.setOnRowClick("#{dynamicDataTable.test}");
// Iterate over columns.
for (int i = 0; i < dynamicList.get(0).size(); i++) {
// Create <h:column>.
HtmlColumn column = new HtmlColumn();
// Create <h:outputText value="dynamicHeaders[i]"> for <f:facet
// name="header"> of column.
HtmlOutputText header = new HtmlOutputText();
header.setValue(dynamicHeaders[i]);
column.setHeader(header);
// Create <h:outputText value="#{dynamicItem[" + i + "]}"> for the
// body of column.
HtmlOutputText output = new HtmlOutputText();
output.setValueExpression("value", createValueExpression(
"#{dynamicItem[" + i + "]}", String.class));
column.getChildren().add(output);
dynamicDataTable.getChildren().add(column);
}
HtmlColumn column = new HtmlColumn();
HtmlAjaxCommandButton commandButton = new HtmlAjaxCommandButton();
String value = "CLICK";
commandButton.setValue(value);
commandButton.setActionExpression(createMethodExpression("#{dynamicDataTable.getSelected}", String.class));
//HtmlActionParameter parameter = new HtmlActionParameter();
//parameter.setValue("#{currentRow}");
//commandButton.getChildren().add(parameter);
column.getChildren().add(commandButton);
dynamicDataTable.getChildren().add(column);
//dynamicDataTable.getChildren().add(createAjaxSuporte());
}
// Getters
// -----------------------------------------------------------------------------------
public List<String> getItem() {
return item;
}
public void setItem(List<String> item) {
this.item = item;
}
public List<List<String>> getDynamicList() {
return dynamicList;
}
private ValueExpression createValueExpression(String valueExpression,
Class<?> valueType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getApplication().getExpressionFactory()
.createValueExpression(facesContext.getELContext(),
valueExpression, valueType);
}
private MethodExpression createMethodExpression(String actionExpression, Class<?> returnType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getApplication().getExpressionFactory().createMethodExpression(
facesContext.getELContext(), actionExpression, returnType, new Class[0]);
}
public String getSelected() {
String x = dynamicDataTable.getRowData().toString();
System.out.println(x);
return "";
}
}
Ao tentar pegar a linha selecionada dynamicDataTable.getRowData().toString(); só para ver se o o objeto ta populado o dynamicDataTable ta null
Alguma luz ?