2017-02-08 4 views
0

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?

+0

was ist innerhalb dieser Methode init() geht .. und fügen die Importe –

+1

bitte Wenn es mit einem neuen Projekt gearbeitet, vielleicht versuchen, ein sauberes zu tun und zu bauen und starte den Server neu ... –

+0

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

Antwort

-1

Sie müssen eine faces-config.xml-Datei generieren, in der Sie deklarieren, dass Ihre verwaltete Bean FileBean ist. Sie haben so etwas zu tun:

enter image description here

+0

Ja, das habe ich gemacht, und die Bean funktioniert ganz gut. Wenn ich einen einfachen String im Getter zurücksende, gibt es kein Problem, aber wenn ich meine benutzerdefinierte Klasse verwende, funktionieren die Dinge nicht mehr. – NielsJ

+0

Sie können ArrayList oder List (allgemeiner) nicht verwenden. Dies funktioniert nicht in Web Java-Projekten. Verwenden Sie Set und geben Sie im Getter-Objekt einen Iterator ein. Ich arbeite so und es funktioniert ok. Ich weiß nicht, warum das nicht funktioniert. – uheredero001

+0

Ich empfehle Ihnen, mit der Klasse hashSet zu arbeiten. – uheredero001

Verwandte Themen