0

http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionRadioCheckbox.jsfの Primefaces データテーブルの例に従って、データ ソースから正しいヘッダーと行数を表示するデータテーブルを作成できました。ただし、データは表示されません。空白のセルが表示されます。

デバッグ後、DataModel の次のコード セクションが問題の原因であることがわかりました。

@Override
public Resource getRowData(String rowKey) {
    List<Resource> resources = (List<Resource>) getWrappedData();

    for(Resource resource : resources) {
        if(resource.getResourceId().equals(rowKey))
            return resource;
    }
    return null;
}

条件はif(resource.getResourceId().equals(rowKey))false と評価されるため、Resourceオブジェクトは返されません。

私は自分が間違っていることを見ることができないようです。my の関連セクションをbean以下に示します。

public class NewIncidentWizardBean implements Serializable {

private static final long serialVersionUID = 1L;

private static Logger logger =  Logger.getLogger(NewIncidentWizardBean.class.getName());

private static Resource[] tmpResources;

static {
    tmpResources = new Resource[12];

    tmpResources[0] = new Resource(new Long(1), ..., new Long(2));
    tmpResources[1] = new Resource(new Long(2), ..., new Long(4));
    tmpResources[2] = new Resource(new Long(3), ..., new Long(10));
    tmpResources[3] = new Resource(new Long(4), ..., new Long(10));
    tmpResources[4] = new Resource(new Long(5), ..., new Long(10));
    tmpResources[5] = new Resource(new Long(6), ..., new Long(10));
    tmpResources[6] = new Resource(new Long(7), ..., new Long(10));
    tmpResources[7] = new Resource(new Long(8), ..., new Long(10));
    tmpResources[8] = new Resource(new Long(9), ..., new Long(10));
    tmpResources[9] = new Resource(new Long(10), ..., new Long(10));
    tmpResources[10] = new Resource(new Long(11), ..., new Long(7));
    tmpResources[11] = new Resource(new Long(12), ..., new Long(90));
}

private List<Resource> resources;
private ResourceDataModel resourcesModel;
private Resource selectedResource;
private Resource[] selectedResources;

public NewIncidentWizardBean() {
    resources = new ArrayList<Resource>();
    for(int i = 0; i < tmpResources.length; i++)
        resources.add(tmpResources[i]);

    resourcesModel = new ResourceDataModel(resources);
}

public Resource getSelectedResource() {
    return selectedResource;
}

public void setSelectedResource(Resource selectedResource) {
    this.selectedResource = selectedResource;
}

public Resource[] getSelectedResources() {
    return selectedResources;
}

public void setSelectedResources(Resource[] selectedResources) {
    this.selectedResources = selectedResources;
}

public Resource getResource() {
    return resource;
}

public void setResource(Resource resource) {
    this.resource = resource;
}

public List<Resource> getResources() {
    return resources;
}

public void setResources(List<Resource> resources) {
    this.resources = resources;
}

public ResourceDataModel getResourcesModel() {
    return resourcesModel;
}
}

そして、私の見解からの関連セクションは次のとおりです。

<p:dataTable id="resources" var="resource" value="#{newDisasterWizardBean.resourcesModel}" paginator="true" rows="10"  
             selection="#{newDisasterWizardBean.selectedResources}">  

    <p:column selectionMode="multiple" style="width:18px" />  

    <p:column headerText="Resource Name">  
        #{resource.name}  
    </p:column>  

    <p:column headerText="Description">  
        #{resource.description}  
    </p:column>  

    <p:column headerText="Resource Type" >  
        #{resource.type}  
    </p:column>  

    <p:column headerText="Units Required">  
        #{resource.units}  
    </p:column>  

</p:dataTable> 

私はまだ間違っているかもしれないことを発見することができません。どんな援助でも大歓迎です。前もって感謝します。

4

1 に答える 1

1

使用している PF のバージョンをメモしておいてもらえますか?
3.3 以降、データ テーブルの遅延読み込み処理が変更されました。3.2 で試してみると、コードが正常に動作するかどうかを確認できます。
さらに、rowKey タグが定義されています。私はあなたがそれを定義する必要があると思います!選択/選択解除をトリガーするには、次の ajax イベントも定義する必要があります。

    <p:dataTable id="myid"
        value="#{myvalue}" var="valuevar"
        selection="#{value.valueSelected}"
        rowKey="#{valuevar.onevalue}">
        <p:ajax event="rowSelect"
            process="@this"
            update="@this" />
        <p:ajax event="rowUnselect"
            process="@this"
            update="@this" />
                    ...................
    </p:dataTable>

私は現在、PrimeFaces issue 2993で言及されている lazy=true パラメーターを使用して 3.3.1 にも固執しています。

それが役立つことを願っています。

于 2012-06-18T10:03:50.307 に答える