Erstes JSF Beispiel [http-apr-8080-exec-8]

lill

Mitglied
Hi,

ich Versuche gerade mehr oder weniger meine erste JSF Seite zu schreiben.
Möchte eine Tabelle auf der Seite anzeigen.

Meine Seite sieht so aus:

HTML:
<?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:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.prime.com.tr/ui">
	<head>
		<title>Book</title>
	</head>
	<body>		
	    <p:dataTable id="booksTable" var="book" value="#{tableBean.books}"
                 paginator="true" rows="15" paginatorPosition="top"
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                 rowsPerPageTemplate="5,10,15">
        <p:column>
            <f:facet name="header">
                <h:outputText value="isbn"/>
            </f:facet>
            <h:outputText value="#{book.isbn}"/>
        </p:column>

        <p:column>
            <f:facet name="header">
                <h:outputText value="author"/>
            </f:facet>
            <h:outputText value="#{book.author}"/>
        </p:column>

        <p:column>
            <f:facet name="header">
                <h:outputText value="title"/>
            </f:facet>
            <h:outputText value="#{book.title}"/>
        </p:column>
    </p:dataTable>	

		</h:form>
	</body>
</html>

und hier die Bean dazu:

Java:
public class Table {

	private static Logger log = LoggerFactory.getLogger(Table.class);
	
    private List<Book> books = new ArrayList<Book>();
    private ListDataModel booksModel;


    private String beanName;

    public Table() {
    	log.error("DataTableBean");
        for (int i = 0; i < 10000 ; i++) {
            books.add(new Book("isbn" + i, "author" + i, "title" + i));
        }
        booksModel = new ListDataModel(books);
    }

    public void addBooks(){
    	log.error("ADD");
        for (int i = 0; i < 10000 ; i++) {
            //books.add(new Book("isbn" + i, "author" + i, "title" + i));
            books.remove(books.size()-1);
        }
    }

    
    public List<Book> getBooks() {
        //log.error(beanName);
        return books;
    }

    public String getBeanName() {
        return beanName;
    }

    public void setBeanName(String beanName) {
        this.beanName = beanName;
    }

    public ListDataModel getBooksModel() {
        return booksModel;
    }

    public void setBooksModel(ListDataModel booksModel) {
        this.booksModel = booksModel;
    }
    
}

Im Browser, wenn ich die Seite aufrufe bekomme ich jetzt den Fehler:

null source

Code:
java.lang.IllegalArgumentException: null source
	at java.util.EventObject.<init>(EventObject.java:56)
	at javax.faces.event.SystemEvent.<init>(SystemEvent.java:67)
	at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:69)
	at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:69)
	at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256)
	at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1805)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

könnte mir vll jemand weiterhelfen?
 

Fant

Bekanntes Mitglied
Welche JSF-Implementierung wird verwendet
Welche Tomcat-Version benutzt du?
Die web.xml und die faces-config.xml könnten auch noch interessant sein.

Dieso (oder auch nur eine sehr ähnliche?) Fehlermeldung hab ich schon ab und an mal in irgendwelchen Foren gesehen. Das lag meist daran, dass eine verbuggte Mojarra-Version benutzt wurde. Ab 2.1.x wurde das gefixt. Wenn das noch nicht hilft, dann melde dich einfach mit dem oben genannten Informationen noch mal wieder.

Aber vielleicht hat ja auch so noch jemand eine andere Idee... :>

Gruß Fant
 

lill

Mitglied
ok, ähm:
jsf-api und impl 2.0.3
tomcat 7.0.25

web.xml:

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<!-- Welcome files -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

</web-app>

[/XML]

faces-config:
[XML]
<?xml version="1.0"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<managed-bean>
<managed-bean-name>tableBean</managed-bean-name>
<managed-bean-class>test.Table</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
</faces-config>
[/XML]
 
Zuletzt bearbeitet:

lill

Mitglied
ok, habe jetzt die jsf jars ausgetauscht zu

jsf-api und impl 2.1.7.jar

der Fehler ist jetzt weg. bekomme jetzt folgender Fehler

Code:
Caused by: java.lang.IllegalStateException: Cannot create a session after the response has been committed
 

JimPanse

Bekanntes Mitglied
statt

1. Statt head -> <h:head> verwenden
2. Du schließt ein form tag öffnest es aber nie -> um die datatable ein h:form Komponente
2. Die Klasse muss serialisiert sein -> außer bei RequestScope
3. Die Exception sagt aus das die Seite erstellt wird ohne eine gültige Session
3.1 Entweder
[XML]
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
[/XML]
3.2 oder ein index.html Seite mit
HTML:
<html>
	<head>
		<meta http-equiv="Refresh" content="0; URL=index.jsf">
	</head>
</html>

Greetz
 

lill

Mitglied
@JimPanse:
Danke, das hat mal das gröbste gelöst

ok,
zu 2.: sry, ist beim kopieren passiert

hab jetzt h:head (und auch h:body, richtig?) verwendet. Die Bean hab ich in der faces-config auf request gestellt und hab den context-paramter javax.faces.STATE_SAVING_METHOD mit in die web.xml aufgenommen

die Seite funktionierniet jetzt, also die Tabelle wird angezeigt, allerdings bekomme ich jetzt wieder auf der Konsole:

Code:
Schwerwiegend: Unable to determine URL for WEB-INF/classes
javax.naming.NameNotFoundException: Resource /WEB-INF/classes not found
at org.apache.naming.resources.BaseDirContext.listBindings(BaseDirContext.java:733)
....
.....
ERROR tableBean
08.05.2012 09:49:57 test.Table [http-apr-8080-exec-6]

und das wird auch jedesmal wieder ausgegeben wenn ich in der Tabelle blättere
(also mit verschiedenen Zahlen hinten dran [http-apr-8080-exec-X])

das
javax.naming.NameNotFoundException: Resource /WEB-INF/classes not found
hab ich nur bei google gefunden in Verbindung von Tomcat und dem Maven plugin, aber das
benutze ich nicht.
Und ansonsten, wenn ich meine war anschaue, gibts da den Ordner WEB-Inf mit dem Ordner classes drin
 

lill

Mitglied
ja, Klasse Table ist im classes Ordner

hier jetzt die veränderte Klasse Table
Java:
@ManagedBean(name="tableBean")
@RequestScoped
public class Table implements Serializable{

	private static Logger log = LoggerFactory.getLogger(Table.class);
	
    private List<Book> books = new ArrayList<Book>();
    private ListDataModel booksModel;


    private String beanName;

    public Table() {
    	log.error("DataTableBean");
        for (int i = 0; i < 10000 ; i++) {
            books.add(new Book("isbn" + i, "author" + i, "title" + i));
        }
        booksModel = new ListDataModel(books);
    }

    public void addBooks(){
    	log.error("ADD");
        for (int i = 0; i < 10000 ; i++) {
            //books.add(new Book("isbn" + i, "author" + i, "title" + i));
            books.remove(books.size()-1);
        }
    }

    
    public List<Book> getBooks() {
        //log.error(beanName);
        return books;
    }

    public String getBeanName() {
        return beanName;
    }

    public void setBeanName(String beanName) {
        this.beanName = beanName;
    }

    public ListDataModel getBooksModel() {
        return booksModel;
    }

    public void setBooksModel(ListDataModel booksModel) {
        this.booksModel = booksModel;
    }
    
}

Fehler kommt immernoch
 

JimPanse

Bekanntes Mitglied
Was für ein Projekt hast du den aufgesetzt bzw welche IDE benutzt du?

Wenn eclipse schau dir dann google mal nach dynamic web project

Help - Eclipse Platform

ansonsten kann ich dir bei der fehlermeldung leider auch nicht weiterhelfen.

Greetz
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Spin JSF erstes Beispiel Web Tier 4
E Mein erstes Servlet Web Tier 8
A JSF Suche Beispiel für Primefaces Tree als Navigation Web Tier 3
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
L JSF Beispiel wird nicht ausgeführt Web Tier 2
A Sicherheitswort programmieren Beispiel Web Tier 2
A Beispiel wirft Fehler. JSF 2.0 / Tomcat / Eclipse Web Tier 2
I Jersey ws und http gleicher Pfad Web Tier 25
P HTTP Respnse 400 Web Tier 21
P HTTP Response 400 Web Tier 1
M XML http request zeigt die eigene Website als response Web Tier 2
feinperligekohlensaeure JSF JSF + Tomcat 9 | HTTP Status 404 |(com.sun.faces.config.ConfigureListener?) Web Tier 1
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
H JSF - falsche HTTP-Adresse im Browser Web Tier 8
D HTTP 404 Status bei JSF Web Tier 5
S Struts - Http Port ändern Web Tier 11
P Simpler HTTP-Container in JBOSS - Geht das? Web Tier 8
F COMET/Long Pulling/HTTP Stream Web Tier 2
S Per HTTP Request auf Ressourcen innerhalb eines JARs zugreif Web Tier 4
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
K Http Status Code abfragen Web Tier 8

Ähnliche Java Themen

Neue Themen


Oben