Primefaces DataTable - Komplex Beispiel: Kein Wert auf ausgewählten Zeile
Ich versuche, führen Sie die DataTable-Beispiel verfügbar auf Primefaces-Showcase. Alle Funktionen funktioniert, aber wenn ich eine Zeile auswählen, wird der Wert der ausgewählten Zeile nicht angezeigt auf meinem <p:dialog>
.
Habe ich bereits überprüft, alle alternativen und nichts funktioniert. Könnte mir jemand helfen?
Ich bin mit Primefaces 3.3 und glassfish 3.0.1. Hier geht mein code:
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 + '}';
}
}
Bearbeitet werden: um dieses problem zu lösen, fügen Sie einfach @ViewScoped auf TableBean.java.
InformationsquelleAutor João Almeida | 2012-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre TableBean sollte ViewScoped.
Hinzufügen @ViewScoped oben TableBean oder konfigurieren Sie es mit faces-config.xml Datei.
InformationsquelleAutor Heidarzadeh
Sind Sie mit dem Beispiel aus der Showcase Labs, welche auf PrimeFaces version 3.4 (noch in der Entwicklung zum Zeitpunkt der Buchung).
Da Sie mit PrimeFaces 3.3, sollten Sie anhand der Beispiele aus der gemeinsamen Vitrine.
Denken Sie daran, dass die Labs version der Showcase läuft immer auf das noch-auf-die-Entwicklung-Versionen, während die gemeinsame Schaufenster ist immer auf die neueste final Version.
Können Sie immer sehen, welche version ausgeführt wird, die hinter der Vitrine durch die überprüfung unten auf der Seite.
Es gibt viele Unterschiede zwischen den 2 von Ihnen. Könnten Sie bitte aktualisieren Sie Ihre Frage mit dem neuen code? Und, wenn möglich, kopieren/fügen Sie den code, nicht die, die in der Vitrine stehen. Durch die Art und Weise, die CarDataModel ist nicht verwendet in der Komplexen Datatable Beispiel, dann gibt es keine Notwendigkeit für Sie, um in Ihr Projekt einbinden.
Hast du auch überprüft, ob es keine JavaScript-Fehlermeldungen in der browser-Konsole (F12 in den meisten Browsern), und keine JSF-Fehlermeldungen in der IDE-Konsole?
Ich werde versuchen, führen Sie das Vorzeigebeispiel, also mein code ist der Showcase-code 🙂 Da das gemeinsame Schaufenster Seite nicht über die Auto-Klasse, die ich gesucht habe und fand es auf [Google Code Seite von PrimeFaces][1]. Das gemeinsame Schaufenster zeigen die CarDataModel.java als Quelle zu. Ich dachte, es wäre nützlich. Wie auch immer, ich habe versucht ohne die CarDataModel und das problem weiterhin besteht. Die Tabelle funktioniert: zeigen die Daten, der filter funktioniert aber wenn ich wählen Sie eine Zeile der Daten erscheint nicht auf dialog. Keine Fehler auf der Konsole IDE festgestellt wurde. Ich habe bearbeitet die Frage, mit diesem code. [1]:code.google.com/p/primefaces
InformationsquelleAutor RinaldoPJr
Seit Klasse Auto ist nur eine gemeinsame Klasse, nicht verwalten bean, brauchen Sie nicht, die Erklärung:
@ManagedBean(name = "Auto")
@SessionScoped
InformationsquelleAutor Singgih Cp