Wyświetlanie danych w p:dataTable z selectionMode="multiple"

0

Witam
Staram się (na początku) zgodnie z dokumentacją
http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionRadioCheckbox.jsf

Mam problem, bo nie wyświetlają mi się dane w dataTable. To znaczy liczba rekordów się zgadza (w moim uproszczonym przykładnie 3), ale brak jest danych. Oczywiście jak okaże się poniżej w tym przypadku jest różny typ danych - dziwne, że w przykładzie z linka powyżej to działa.

dataTable.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Test PrimeFaces DataTable</title>
    </h:head>
    <h:body>
        <h:form>
            <p:dataTable id="parametry" var="param" value="#{tableControllers.parameters}" rows="10"  
                         selection="#{tableControllers.selectedParameters}">
                <p:column selectionMode="multiple" style="width:18px" />
                <p:column headerText="Nazwa operacji">  
                    #{param.parameterName} <!--Tu jest błąd: Unknown property 'parameterName' -->
                </p:column> 
            </p:dataTable>
        </h:form>
    </h:body>
</html>

TableControllers.java
<code = java>package baza.jpa.controllers;

import baza.jpa.Parameter;
import baza.jpa.controllers.view.ParameterDataModel;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class TableControllers {

private ParameterDataModel parameters;
private Parameter[] selectedParameters;

public ParameterDataModel getParameters() {
    return parameters;
}

public void setParameters(ParameterDataModel parameters) {
    this.parameters = parameters;
}

public Parameter[] getSelectedParameters() {
    return selectedParameters;
}

public void setSelectedParameters(Parameter[] selectedParameters) {
    this.selectedParameters = selectedParameters;
}


/**
 * Creates a new instance of TableControllers
 */
public TableControllers() {
    List<Parameter> paramList = new ArrayList<Parameter>();
    paramList.add(new Parameter(1,"Param 1"));
    paramList.add(new Parameter(2,"Param 2"));
    paramList.add(new Parameter(3,"Param 3"));
    parameters = new ParameterDataModel(paramList);
}

}



Parameter.java
<code =  java>package baza.jpa;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name = "Parameter")
public class Parameter implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    private Integer parameterId;
    private String parameterName;


    public Parameter() {
    }

    public Parameter(Integer parameterId,String parameterName) {
        this.parameterId = parameterId;
        this.parameterName = parameterName;
    }


    public Integer getParameterId() {
        return parameterId;
    }

    public void setParameterId(Integer parameterId) {
        this.parameterId = parameterId;
    }

    public String getParameterName() {
        return parameterName;
    }

    public void setParameterName(String parameterName) {
        this.parameterName = parameterName;
    }

    @Override
    public String toString() {
        return "baza.jpa.Parameter[ parameterId=" + parameterId + " ]";
    }
    
}

ParameterDataModel.java
<code = java>package baza.jpa.controllers.view;

import baza.jpa.Parameter;
import java.util.List;
import javax.faces.model.ListDataModel;
import org.primefaces.model.SelectableDataModel;

public class ParameterDataModel extends ListDataModel<Parameter> implements SelectableDataModel<Parameter> {
public ParameterDataModel() {
}

public ParameterDataModel(List<Parameter> data) {  
    super(data);  
}  
  
@Override  
public Parameter getRowData(String rowKey) {  
      
    List<Parameter> parameters = (List<Parameter>) this.getWrappedData();  
      
    for(Parameter parameter : parameters) {  
        if(parameter.getParameterId().toString().equals(rowKey))  
            return parameter;  
    }  
      
    return null;  
}  

@Override  
public Object getRowKey(Parameter parameter) {  
    return parameter.getParameterId();  
} 

}


Jak napisałem w dataTable.xhtml NetBeans w tym miejscu wyrzuca błąd:
#{param.parameterName} <!--Tu jest błąd: Unknown property 'parameterName' -->
Próbowałem kilku(nastu) kombinacji, np. żeby value="#{tableControllers.parameters}" wstawiać Listę "List<Parameter> i dawać rowKey, ale też to nie działało;(
0

Witam
Chyba sam sobie odpowiem;) Znalazłem rozwiązanie i jednoczenie wszystko wskazuje na to, że błąd w PrimeFaces (u mnie wersja 3.2)
W powyższym przykładzie wystarczyło w var="param" zmienić na var="par" lub cokolwiek innego byle nie "param". Musiałem akurat trafić na "param" :D

Z tego względu poniższy kod już poprawnie wyświetla dana

<h:form>
            <p:dataTable id="parametry" var="par" value="#{tableControllers.parameters}" rows="10"  
                         selection="#{tableControllers.selectedParameters}">
                <p:column selectionMode="multiple" style="width:18px" />
                <p:column headerText="Nazwa operacji">  
                    #{par.parameterName} <!--Tu jest błąd: Unknown property 'parameterName' -->
                </p:column> 
            </p:dataTable>
        </h:form>

Dziwne...;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.