Ich habe eine einfache XHTML-Datei und eine entsprechende Java Bean erstellt. Innerhalb der Java Bean erzeuge ich eine ArrayList mit Objekten meiner benutzerdefinierten Klasse "FilePreview", die in einem anderen Paket definiert ist (ich habe es natürlich in die Bean importiert). In meiner XHTML-Datei verwende ich ui-repeat, um über die Liste zu iterieren und jedes Element anzuzeigen. Ich versuche mit get-Methoden auf die Eigenschaften meiner Objekte zuzugreifen.Zugriff auf benutzerdefinierte Java-Objekt von JSF XHTML-Datei
Meine XHTML-Datei
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:b="http://bootsfaces.net/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<link href="css/stylesheet.css" rel="stylesheet" type="text/css" />
</h:head>
<body>
<ui:composition template="./template.xhtml">
<ui:define name="title">
Dateien
</ui:define>
<ui:define name="content">
<b:container>
<ui:repeat value="#{FileBean.files}" var="files">
<b:panel title="#{files.headline}" look="primary">
<h:outputText value="#{files.description}" />
</b:panel>
<b:alert class= "file" severity="success"><strong>#{files.headline}</strong><br></br> <span>#{files.description}</span></b:alert>
</ui:repeat>
</b:container>
</ui:define>
</ui:composition>
</body>
</html>
Mein JavaBean:
import de.unibremen.st.gradelog.model.FilePreview;
import java.util.ArrayList;
@ManagedBean(name = "FileBean")
@SessionScoped
public class FileBean implements Serializable {
// private DBHandler handler;
private ArrayList<FilePreview> files;
public void create() {
files = new ArrayList();
files.add(new FilePreview("Hausordnung",
"Anbei findet Ihr die aktualisierte Hausordnung. Bitte gründlich lesen!",
null, null, null));
}
public ArrayList getFiles() {
/**
* DBHandler.getFiles(userID);
*/
System.out.println("Lese die Dateien aus.");
create();
return files;
}
}
Und die Klasse FilePreview schließlich:
package de.unibremen.st.gradelog.model.FilePreview
public class FilePreview {
private String headline, description, authorID, fileID;
private File file;
public FilePreview(String headline, String description, String authorID,
String fileID, File file) {
this.headline = headline;
this.description = description;
this.authorID = authorID;
this.fileID = fileID;
this.file = file;
}
public String getHeadline() {
return headline;
}
//... more simple getters and setters
}
Alles scheint finden nur zu arbeiten, aber wenn ich laufe Die Anwendung und Zugriff auf meine neue Seite, bekomme ich den folgenden Fehler:
Schwerwiegend: Error Rendering View[/files.xhtml]
javax.el.ELException: /files.xhtml @51,82 value="#{FileBean.files}": java.lang.NoClassDefFoundError: de/unibremen/st/gradelog/model/FilePreview
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at com.sun.faces.facelets.component.UIRepeat.getValue(UIRepeat.java:279)
at com.sun.faces.facelets.component.UIRepeat.getDataModel(UIRepeat.java:255)
...
Caused by: javax.el.ELException: java.lang.NoClassDefFoundError: de/unibremen/st/gradelog/model/FilePreview
at javax.el.BeanELResolver.getValue(BeanELResolver.java:368)
Muss ich die Klasse JSF in irgendeiner Weise bekannt machen? Ich arbeite mit einem bestehenden JSF-Projekt und als ich versuchte, dasselbe mit einem neuen Projekt zu tun, funktionierte alles gut.
Wer hat eine Idee, was könnte das verursachen?
was ist innerhalb dieser Methode init() geht .. und fügen die Importe –
bitte Wenn es mit einem neuen Projekt gearbeitet, vielleicht versuchen, ein sauberes zu tun und zu bauen und starte den Server neu ... –
Ich habe einige Importe hinzugefügt. Die init() -Methode sollte create() sein, weil ich einige andere (irrelevante) Sachen in der init() -Methode gemacht habe und Sie damit nicht belästigen wollte. – NielsJ