1

PrimefacesShowcaseで利用可能なDataTableの例を実行しようとしています。すべての機能は機能しますが、行を選択すると、選択した行の値がに表示されません<p:dialog>

私はすでにすべての選択肢をチェックしましたが、何も機能しません。誰かが私を助けてもらえますか?

Primefaces3.3とglassfish3.0.1を使用しています。これが私のコードです:

dataTableComplex.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>

    </h:head>

    <body>

        <h:form id="form">

            <p:dataTable var="car" value="#{tableBean.cars}" rowKey="#{car.model}" paginator="true" rows="10"
                         selection="#{tableBean.selectedCar}" selectionMode="single" id="carsTable">

                <p:ajax event="rowSelect" update=":form:display" oncomplete="carDialog.show()" />

                <f:facet name="header">
                    List of Cars
                </f:facet>

                <p:column headerText="Model" sortBy="#{car.model}" filterBy="#{car.model}" id="model">
                    #{car.model}
                </p:column>

                <p:column headerText="Year" sortBy="#{car.year}" filterBy="#{car.year}" id="year">
                    #{car.year}
                </p:column>

                <p:column headerText="Manufacturer" sortBy="#{car.manufacturer}" filterBy="#{car.manufacturer}" id="manufacturer">
                    #{car.manufacturer}
                </p:column>

                <p:column headerText="Color" sortBy="#{car.color}" filterBy="#{car.color}" id="color">
                    #{car.color}"
                </p:column>

            </p:dataTable>

            <p:dialog header="Car Detail" widgetVar="carDialog" resizable="false"
                      width="200" showEffect="explode" hideEffect="explode">

                <h:panelGrid id="display" columns="2" cellpadding="4">                  

                    <h:outputText value="Model:" />
                    <h:outputText value="#{tableBean.selectedCar.model}" id="model"/>

                    <h:outputText value="Year:" />
                    <h:outputText value="#{tableBean.selectedCar.year}" id="year"/>

                    <h:outputText value="Manufacturer:" />
                    <h:outputText value="#{tableBean.selectedCar.manufacturer}" id="manufacturer"/>

                    <h:outputText value="Color:" />
                    <h:outputText value="#{tableBean.selectedCar.color}" id="color"/>
                </h:panelGrid>
            </p:dialog>
        </h:form>            
    </body>

</html>

TableBean.java

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ViewScoped
@ManagedBean(name = "tableBean")
@SessionScoped

public class TableBean implements Serializable {

private final static String[] colors;

private final static String[] manufacturers;

static {
    colors = new String[10];
    colors[0] = "Black";
    colors[1] = "White";
    colors[2] = "Green";
    colors[3] = "Red";
    colors[4] = "Blue";
    colors[5] = "Orange";
    colors[6] = "Silver";
    colors[7] = "Yellow";
    colors[8] = "Brown";
    colors[9] = "Maroon";

    manufacturers = new String[10];
    manufacturers[0] = "Mercedes";
    manufacturers[1] = "BMW";
    manufacturers[2] = "Volvo";
    manufacturers[3] = "Audi";
    manufacturers[4] = "Renault";
    manufacturers[5] = "Opel";
    manufacturers[6] = "Volkswagen";
    manufacturers[7] = "Chrysler";
    manufacturers[8] = "Ferrari";
    manufacturers[9] = "Ford";
}

private List<Car> cars;

private Car selectedCar;

private Car[] selectedCars;

public TableBean() {
    cars = new ArrayList<Car>();

    populateRandomCars(cars, 50);
}

public Car getSelectedCar() {
    return selectedCar;
}

public void setSelectedCar(Car selectedCar) {
    this.selectedCar = selectedCar;
}

private void populateRandomCars(List<Car> list, int size) {
    for(int i = 0 ; i < size ; i++)
        list.add(new Car(getRandomModel(), getRandomYear(), getRandomManufacturer(), getRandomColor()));
}

private int getRandomYear() {
    return (int) (Math.random() * 50 + 1960);
}

private String getRandomColor() {
    return colors[(int) (Math.random() * 10)];
}

private String getRandomManufacturer() {
    return manufacturers[(int) (Math.random() * 10)];
}

private String getRandomModel() {
    return UUID.randomUUID().toString().substring(0, 8);
}

public List<Car> getCars() {
    return cars;
}
}

Car.java

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean(name = "car")
@SessionScoped

public class Car implements Serializable {

private String model;
private int year;
private String manufacturer;
private String color;
private int price;

public Car(){

}
public Car(String model, int year, String manufacturer, String color) {
            this.model = model;
            this.year = year;
            this.manufacturer = manufacturer;
            this.color = color;
    }

    public Car(String model, int year, String manufacturer, String color, int price) {
            this.model = model;
            this.year = year;
            this.manufacturer = manufacturer;
            this.color = color;
    this.price = price;
    }

    public String getModel() {
            return model;
    }

    public void setModel(String model) {
            this.model = model;
    }

    public int getYear() {
            return year;
    }

    public void setYear(int year) {
            this.year = year;
    }

    public String getManufacturer() {
            return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
            this.manufacturer = manufacturer;
    }

    public String getColor() {
            return color;
    }

    public void setColor(String color) {
            this.color = color;
    }

 public int getPrice() {
    return price;
}

public void setPrice(int price) {
    this.price = price;
}

    @Override
    public boolean equals(Object obj) {
            if(obj == null)
                    return false;

            if(!(obj instanceof Car))
                    return false;

            Car compare = (Car) obj;

            return compare.model.equals(this.model);
    }

    @Override
    public int hashCode() {
            int hash = 1;

        return hash * 31 + model.hashCode();
    }

@Override
public String toString() {
    return "Car{" + "model=" + model + ", year=" + year + ", manufacturer=" + manufacturer + ", color=" + color + ", price=" + price + '}';
}
}

編集:この問題を解決するには、TableBean.javaに@ViewScopedを追加するだけです。

4

3 に答える 3

1

TableBean は ViewScoped である必要があります。

TableBean の上に @ViewScoped を追加するか、faces-config.xml ファイルを使用して構成します。

于 2012-08-10T00:06:55.060 に答える
0

PrimeFaces バージョン 3.4 (投稿時点ではまだ開発中) で実行されているShowcase Labsの例を使用しています。

PrimeFaces 3.3 を使用しているため、一般的なShowcaseの例を使用する必要があります。

ショーケースのLabsバージョンは常に開発中のバージョンで実行されますが、一般的なショーケースは常に最新の最終リリースで実行されることに注意してください。

ページの下部を確認することで、Showcase の背後で実行されているバージョンをいつでも確認できます。

于 2012-08-09T16:41:42.727 に答える
0

クラス Car はマネージ Bean ではなく単なる共通クラスであるため、宣言は必要ありません。

@ManagedBean(name = "car") @SessionScoped

于 2013-06-05T17:26:27.557 に答える