2017-02-08 2 views
0

Я создал простой файл XHTML и соответствующий Java-компонент. Внутри Java Bean я генерирую ArrayList с объектами моего пользовательского класса «FilePreview», который определен в другом пакете (я, конечно, импортировал его в Bean). В моем XHTML-файле я использую ui-repeat для перебора списка и отображения каждого элемента. Я пытаюсь получить доступ к свойствам своих объектов, используя get-Methods.Доступ к пользовательскому объекту Java из файла JSF XHTML

Мой XHTML-файл

<?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> 

Мой 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; 
    } 

} 

И, наконец, класс FilePreview:

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 
} 

Все, кажется, работает только найти, но когда я бегу приложение и доступ к моей новой странице, я получаю следующую ошибку:

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) 

Должен ли я сделать класс, известный JSF? Я работаю с существующим проектом JSF, и когда я пытался сделать то же самое с новым проектом, все работало отлично.

Кто-нибудь понял, что может вызвать это?

+0

что происходит внутри этого метода Init() .. и добавить импорт пожалуйста, –

+1

Если он работал с новым проектом, может попытаться сделать чистую и строить и перезапустите сервер ... –

+0

Я добавил некоторые импорты. Метод init() предназначался для create(), потому что я сделал некоторые другие (несущественные) вещи в методе init() и не хотел беспокоить вас всем этим. – NielsJ

ответ

-1

Вы должны сгенерировать файл faces-config.xml, в котором объявляете, что ваш управляемый компонент является FileBean. Вы должны сделать что-то вроде этого:

enter image description here

+0

Да, я сделал это, и Бин прекрасно работает. Если я возвращу простую строку в getter, нет проблем, но когда я использую свой собственный класс, вещи больше не работают. – NielsJ

+0

Вы не можете использовать ArrayList или List (более общий). Это не работает в проектах Web Java. Используйте Set и в getter возвратите итератор. Я работаю так, и все работает нормально. Я не знаю причины, почему это не работает. – uheredero001

+0

Предлагаю вам работать с классом hashSet. – uheredero001