JSF Button - Methode wird nicht aufgerufen

masterjule

Mitglied
Hallo,

ich arbeite, zur Übung hauptsächlich, im Moment an einem kleinen Projekt.

Komme leider grad nicht weiter. Ich habe eine Seite mit JSF und Primefaces.
AUf der Rechten Seite sind Eingabefelder und darunter ein "Speichern"-Button.
Aber wenn ich den Button klicke, wird zwar die Seite neu geladen, aber meine save-Methode im Handler wird nicht aufgerufen.

Weis jetzt einfach nicht weiter und wende mich deshalb an euch.

Hoffentlich könnt ihr mir helfen!

index.xhtml
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <f:view contentType="text/html">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>jBook</title>
            </f:facet>

            <link type="text/css" rel="stylesheet" href="default.css" />

            <style type="text/css">
                .ui-layout-north {
                    z-index:20 !important;
                    overflow:visible !important;;
                }

                .ui-layout-north .ui-layout-unit-content {
                    overflow:visible !important;
                }
            </style>
        </h:head>


        <h:body>
            <h:form id="form" prependId="false">
            <p:layout id="mainLayout" fullPage="true" >

                <p:layoutUnit id="top" position="north" size="50">
                    
                </p:layoutUnit>

                <p:layoutUnit id="bottom" position="south" size="60">
                    
                </p:layoutUnit>

                <p:layoutUnit id="left" position="west" size="300" resizable="true" closable="true" collapsible="true" header="Options" minSize="200">
                    <h:form>
                        <p:commandButton value="Neu" action="#{derTestHandler.newBook}" ajax="false" />
                        <p:commandButton value="Neuladen" action="#{derTestHandler.reload}" ajax="false" />
                        <p:commandButton value="Testdaten" action="#{derTestHandler.generateTestData}" ajax="false" />
                        <p:commandButton value="x" actionListener="#{derTestHandler.mach}" ajax="false" />
                        
                    </h:form>
                </p:layoutUnit>

                <p:layoutUnit id="right" position="east" size="320" header="hjhjh" resizable="true" closable="true" collapsible="true" collapsed="#{derTestHandler.c}">
                    <h:form>
                        <ui:include src="inputBook.xhtml" />
                    </h:form>
                </p:layoutUnit>

                <p:layoutUnit id="center" position="center">
                    <h:form>
                        
                        <ui:include src="table.xhtml" />
                        
                    </h:form>


                </p:layoutUnit>

            </p:layout>
            </h:form>

        </h:body>

    </f:view>
</html>

inputBook.xhtml
HTML:
<ui xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <h:form id="inputBook">
        
        <h:panelGrid id="test" columns="2" style="margin-bottom:10px" cellpadding="5">
             
            <h:outputText value="Titel" />
            <p:inputText id="title" value="#{derTestHandler.book.title}" required="true" />
           
            <h:outputLabel value="Autor" for="author" />
            <p:autoComplete id="author" dropdown="true" value="#{derTestHandler.book.author.name}" completeMethod="#{derTestHandler.complete}" />
            
            <h:outputText value="Regal" />
            <p:inputText id="shelf" value="#{derTestHandler.book.shelf.name}" required="true" />
            
            <h:outputText value="Gelesen" />
            <p:selectBooleanCheckbox value="#{derTestHandler.book.read}" />
            
            <p:commandButton value="Speichern" action="#{derTestHandler.save}" ajax="false" />
            <p:commandButton type="reset" value="Reset" />
            
        </h:panelGrid>
        
    </h:form>
</ui>

DerTestHandler.java
Java:
/*
 * 
 */
package com.mycompany.jbook.handler;

import com.mycompany.jbook.entities.Author;
import com.mycompany.jbook.entities.Book;
import com.mycompany.jbook.entities.Shelf;
import com.mycompany.jbook.facade.BookFacade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.SelectEvent;

/**
 *
 */
@ManagedBean
@SessionScoped
public class DerTestHandler {
    @EJB
    private BookFacade bookFacade;
    
    private List<Book> bookList;
    private Book book = new Book();
    private List<Author> authorList;
    private double rating = 2;
    private boolean c = true;

    /**
     * Creates a new instance of DerTestHandler
     */
    public DerTestHandler() {
        book.setAuthor(new Author());
        book.setShelf(new Shelf());
    }
    
    public final void reload() {
        bookList = bookFacade.getAllBooks();
    }
    
    public void save() {
        authorList = bookFacade.getAllAuthors();
        for(Author a : authorList) {
            if(a.getName().equals(book.getAuthor().getName())) {
                book.setAuthor(a);
                break;
            }
        }
        bookFacade.save(book);
        String x = null;
    }
    
    public List<String> complete(String query) {
        initAuthorList();
        List<String> result = new ArrayList<String>();
        
        for(Author a : authorList) {
            if(a.getName().startsWith(query)) {
                result.add((a.getName()));
            }
        }
        
        return result;
    }
    
    public void newBook() {
        book = new Book();
        book.setAuthor(new Author());
        book.setShelf(new Shelf());
    }
    
    private void initAuthorList() {
        if(authorList == null) {
            authorList = bookFacade.getAllAuthors();
        }
    }

    /**
     * @return the rating
     */
    public double getRating() {
        return rating;
    }

    /**
     * @return the book
     */
    public Book getBook() {
        return book;
    }

    /**
     * @param book the book to set
     */
    public void setBook(Book book) {
        this.book = book;
    }

    /**
     * @return the bookList
     */
    public List<Book> getBookList() {
        return bookList;
    }

    public void generateTestData() {
        bookFacade.generateTestData();
    }
    
    public void onRowSelect(SelectEvent select) {
        this.book = (Book) select.getObject();
    }
    
    public void onRowUnselect() {
        newBook();
    }

    /**
     * @return the c
     */
    public boolean isC() {
        return c;
    }

    /**
     * @param c the c to set
     */
    public void setC(boolean c) {
        this.c = c;
    }
    
    public void mach() {
        Book n = book;
        if(c == true) {
            c = false;
        } else {
            c = true;
        }
    }
}

Gruß
Julian
 
N

nillehammer

Gast
JSF ist schon etwas her. Kann sein, dass es inzwischen automatisch geht. Aber musst Du einer ManagedBean nicht irgendeinen Namen geben? Woher weiß JSF sonst, dass "derTestHandler" eine Instanz von TestHandler sein soll. So müsste es klappen:
Java:
@ManagedBean("derTestHandler")
 

JimPanse

Bekanntes Mitglied
Das Problem ist folgender Code

Java:
 <h:form id="form" prependId="false">
            <p:layout id="mainLayout" fullPage="true" >
                <p:layoutUnit id="left" position="west" size="300" resizable="true" closable="true" collapsible="true" header="Options" minSize="200">
                   <h:form>
                        <p:commandButton value="Neu" action="#{derTestHandler.newBook}" ajax="false" />
                        <p:commandButton value="Neuladen" action="#{derTestHandler.reload}" ajax="false" />
                        <p:commandButton value="Testdaten" action="#{derTestHandler.generateTestData}" ajax="false" />
                        <p:commandButton value="x" actionListener="#{derTestHandler.mach}" ajax="false" />
                        
                    </h:form>
                </p:layoutUnit>
       </h:form>

du hast zwei form Elemente in einander verschachtelt! Das ist laut HTML Spezifikation verboten:
SELFHTML: HTML/XHTML / Referenz /HTML-Elementreferenz

d.h. werden deine Buttons nicht ausgeführt.

Greetz
 

imillitay

Mitglied
JSF ist schon etwas her. Kann sein, dass es inzwischen automatisch geht. Aber musst Du einer ManagedBean nicht irgendeinen Namen geben? Woher weiß JSF sonst, dass "derTestHandler" eine Instanz von TestHandler sein soll. So müsste es klappen:
Java:
@ManagedBean("derTestHandler")

Ist nicht nötig! Ab JSF2 ist die Herangehensweise von masterjule hier korrekt.
 

Nogothrim

Aktives Mitglied
das mit den Forms sieht auf jeden Fall gefährlich aus, ansonsten ist mir noch der f:view Tag aufgefallen, den man bei JSF2 eigentlich auch nie braucht. Der Name der ManagedBean wird automatisch aus dem Klassennamen abgeleitet, das ist schon so richtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Button klick soll Java methode aufrufen Web Tier 2
T Back Button bei JSF Anwendung Web Tier 2
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
Y Welcher Submit-Button wurde gedrückt? Web Tier 0
O JSF AccessKey auf Button-Beschriftung hervorheben Web Tier 0
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
5 Button ID von betätigten Button herausfinden Web Tier 8
M JSF Simple Testklasse für Button - MethodNotFoundException? Web Tier 6
J JSF Kein Methodenaufruf mit Button möglich durch PhaseListener (redirect) Problem? Web Tier 2
L in JSF ein download button erstellen Web Tier 4
B Mit JavaServlet Submit Button ermitteln Web Tier 5
T Button im Servlet - Werte übergeben Web Tier 2
K JSF: Tabelle; Button, Stringausgabe Web Tier 2
Tandibur JSF: Verlinkung mittels Button, bedingte Weiterleitung Web Tier 4
I Zurück Button mit JSF Command Button Web Tier 2
J location response-header? Browser-Back-Button "deaktivieren" Web Tier 9
MQue in JSP: "Drucken"- Button Web Tier 2
P Zurück-Button des Browsers macht Probleme Web Tier 9
M Struts 2 Submit Button lokalisieren Web Tier 5
S Facelets Form: Validation abschalten bei Abbrechen-Button Web Tier 2
T Button abfrage mit Struts leicht gemacht ? Web Tier 3
A JSF: Button reagiert nicht und nicht verständliche Warnung Web Tier 6
G radio button deselect mit struts Web Tier 7
M JSF JSF: Methode bei versteckt aufrufen & Parameter übergeben Web Tier 6
R get-methode der Managed-Bean wird immer 3 mal ausgeführt Web Tier 4
Joew0815 Spring Handle All Requests Methode Web Tier 1
M rendered ruft eine Methode auf, andere aber nicht Web Tier 15
V Mittels JavaScript Methode aufrufen Web Tier 23
K JSF Unified-EL- Methode mit Parameterübergabe Web Tier 9
F NullPointerException auf validator methode Teil2? Web Tier 2
B JSF NullPointerException auf validator methode Web Tier 7
P Mit EL Parameter an Methode übergeben Web Tier 5
I Im PhaseListener Service Methode aufrufen Web Tier 21
J JSF Datatable bestimmte Methode Web Tier 4
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
M JSF: Bei Seitenaufruf eine Methode starten Web Tier 15
H JSF - Methode kann nicht aufgerufen werden Web Tier 5
M Body onUnload Java Methode aufrufen Web Tier 13
K bean methode von jslt aufrufen Web Tier 7
D <html:select> bzw. <html:option> - Methode auslösen ? Web Tier 2
D [JSF] Lifecycle Methode wird mehrfach aufgerufen Web Tier 4
F Problem mit der Methode request.getRemotePort() Web Tier 2
D Methode bei Server Startup ausführen Web Tier 2
E Methode einer Bean aus anderer Bean aufrufen Web Tier 10
S JSF: Methode mit Parametern aufrufen Web Tier 7
J Fehler Tomcat/JSP findet Methode nich Web Tier 3
G Mit JSTL Rückgabe von Bean Methode ausgeben Web Tier 3
G in validate methode auf form objekte zugreifen Web Tier 3
A Action-Methode soll Ausgabe auf der Responsepage steuern Web Tier 4
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9
L Set<T> Attribut eines Objektes wird zu null in thymeleaf Web Tier 2
C JSP data wird nicht angezeigt Web Tier 6
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
W Tabelle wird nicht aktualisiert Web Tier 8
A JSF String wird nicht angezeigt Web Tier 2
S JSF CSS wird gefunden aber inhaltlich nicht angewendet Web Tier 2
R JSF ManagedProperty wird nicht erstellt Web Tier 1
M fileUploadListener geht nicht wenn Element zur Laufzeit gerendert wird Web Tier 2
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
F JSF CSS Verschachtelung wird nicht abgebildet Web Tier 2
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
D JSF a4j:support wird nicht gefunden Web Tier 2
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
T JSF wird nicht ausgeführt Web Tier 4
aze JSF CommandButton:Action wird nicht ausgeführt Web Tier 2
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
L JSF Beispiel wird nicht ausgeführt Web Tier 2
T JSF Eigener Converter wird nur für Eingabekomponenten aufgerufen? Web Tier 3
L einfache JSF-Seite wird nicht angezeigt Web Tier 8
B JSF HtmlCommandButton --- Action wird nicht aufgerufen Web Tier 2
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
P JSF AJAX render wird nicht ausgeführt Web Tier 4
X Seite wird mit AJAX neu geladen Web Tier 4
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
borobudur Servlet Business-Logik wird bei jedem Request neu erstellt Web Tier 13
J JSF JSF2.0 template wird nicht gerendert!? Web Tier 2
C GWT: RPC wird nicht gefunden Web Tier 3
I Beim zurück-Link wird immer ein Request ausgeführt Web Tier 5
E JSP ist es noch aktuell oder wird heute was anderes genutzt? Web Tier 3
J JSF Custom Component ValueExpression wird nur als String erkannt Web Tier 2
E init() wird mehrmals aufgerufen Web Tier 4
L [RichFaces] Applikation wird mit NullPointerException beendet Web Tier 5
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
V JSF: dataTable Getter wird nie aufgerufen Web Tier 6
megachucky JSF - JSTL Library wird nicht gefunden Web Tier 4
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
K [gelöst] JSF-Seite wird nicht angezeigt Web Tier 3
H JSF Seite wird plain angezeigt Web Tier 3
N URL bei WebApp wird immer laenger Web Tier 5
G JSP/JSF Inputtext rerender wenn Value geändert wird Web Tier 2
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben