Methode Nicht Gefunden in JSF Bean

Ich habe eine Anwendung mit JSF 1.x, die ist und läuft.

Die Anwendung hat 2 Teile, ein Wesen berufen, ein action-event und zeigt die gleiche Seite, und die zweite ist eine Methode aufzurufen, und navigieren Sie zur nächsten Seite. Typische Hallo Welt " - Beispiel.

Aber der Zweite Teil der Anwendung nicht so funktioniert, wie es ist nicht, dass man die Methode in der bean-Klasse.

Den 'Abschied' - button in hello.jspfunktioniert nicht.

Rief ich die Url http://localhost:8090/balaji/faces/JSP/hello.jsp die Ausführung korrekt anzeigt, mir die Hallo.jsp-Seite.

Aber der Abschied Schaltfläche in Hallo.jsp Seite funktioniert nicht, die, wenn geklickt wird keine änderung der URL. Aber ich habe den Fehler auf den stack-trace, wie unten gezeigt. Die Methode ist bestehenden, und es ist die öffentlichkeit, die EL-Ausdruck richtig ist -, Navigations-Regel festgelegt ist, wird der JSP-Seite vorhanden ist, aber die Methode wird nicht mehr reagiert.

Meine Stack-Ablaufverfolgung zeigt den folgenden Fehler:

Stacktrace:

13 Dec, 2012 7:17:19 PM javax.faces.event.MethodExpressionActionListener processAction
SEVERE: Received 'org.apache.jasper.el.JspMethodNotFoundException' when invoking action listener '#{helloBean.goodbye}' for component 'goodbyeCommand'
13 Dec, 2012 7:17:19 PM javax.faces.event.MethodExpressionActionListener processAction
SEVERE: org.apache.jasper.el.JspMethodNotFoundException: /JSP/hello.jsp(40,2) '#{helloBean.goodbye}' Method not found: com.achutha.bean.HelloBean@46a5c4.goodbye(javax.faces.event.ActionEvent)
    at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:73)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:99)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:771)
    at javax.faces.component.UICommand.broadcast(UICommand.java:372)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    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:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
    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:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Meine Bewerbung-Struktur ist wie folgt :

- Paket-Struktur :

Methode Nicht Gefunden in JSF Bean

Maven-Abhängigkeiten :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.achutha.labs</groupId>
    <artifactId>02JsfExample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>02JsfExample</name>

    <dependencies>

        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>1.2_14</version>
        </dependency>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>1.2_14</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- EL -->
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>el-impl</artifactId>
            <version>2.2</version>
        </dependency>


    </dependencies>


    <build>
        <finalName>JavaServerFaces</finalName>

        <plugins>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <configuration>
                    <url>http://localhost:8090/manager/text</url>
                    <server>TomcatServer</server>
                    <path>/balaji</path>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Gesichter Konfiguration :

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
     "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
     "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
    <managed-bean>
        <description> The one and only HelloBean.</description>
        <managed-bean-name>helloBean</managed-bean-name>
        <managed-bean-class>com.achutha.bean.HelloBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>



    <navigation-rule>
        <description>Navigation From the Hello Page.</description>
        <from-view-id>/JSP/hello.jsp</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/JSP/goodbye.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>

</faces-config>

Deployment-Deskriptor (web.xml) :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

   <web-app version="2.5"
      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">

        <display-name>Hello, World!</display-name>
        <description>Welcome to JavaServer Faces</description>

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

        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>

        <welcome-file-list>
            <welcome-file>faces/JSP/hello.jsp</welcome-file>
        </welcome-file-list>


    </web-app>

Hallo.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<f:view>
    <html>
<head>
<title>JSF In Action - Hello, world!</title>
</head>
<body>
    <h:form id="welcomeForm">
        <h:outputText id="welcomeOutput" value="Welcome to JavaServer Faces !"
            style="font-family: Arial, sans-serif; font-size: 23; color: green;" />

        <p>
            <h:message id="errors" for="helloInput" style="color: red" />
        </p>

        <p>
            <h:outputLabel for="helloInput">
                <h:outputText id="helloInputLabel"
                    value="Enter Number of controls to display: ">

                </h:outputText>

                <h:inputText id="helloInput" value="#{helloBean.numControls}"
                    required="true">
                    <f:validateLongRange minimum="1" maximum="500" />
                </h:inputText>
            </h:outputLabel>
        </p>

        <p>
            <h:panelGrid id="controlPanel" binding="#{helloBean.controlPanel}"
                columns="20" border="1" cellspacing="0" />
        </p>

        <h:commandButton id="redisplayCommand" type="submit" value="Redisplay"
            actionListener="#{helloBean.addControls}" />

        <h:commandButton id="goodbyeCommand" type="submit" value="Goodbye"
            actionListener="#{helloBean.goodbye}" immediate="true"/>

    </h:form>

</body>

    </html>

</f:view>

verabschieden.jsp :

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
    <html>
<head>
<title>Jsf in Action - Hello World!</title>
</head>
<body>
    <h:form id="goodbyeForm">
        <p>
            <h:outputText id="welcomeOutput" value="Good Bye"
                style="font-family: Arial, sans-serif; font-size: 24; font-style: bold; color: green;" />

        </p>
        <p>
            <h:outputText id="helloBeanOutputLabel"
                value="Number of controls displayed: " />
            <h:outputText id="helloBeanOutputLabel"
                value="#{helloBean.numControls}" />
        </p>
    </h:form>

</body>
    </html>
</f:view>

Bean-Klasse :

package com.achutha.bean;

import java.util.List;

import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

public class HelloBean {

    private int numControls;
    private HtmlPanelGrid controlPanel;

    public int getNumControls() {
        return numControls;
    }

    public void setNumControls(int numControls) {
        this.numControls = numControls;
    }

    public HtmlPanelGrid getControlPanel() {
        return controlPanel;
    }

    public void setControlPanel(HtmlPanelGrid controlPanel) {
        this.controlPanel = controlPanel;
    }

    public void addControls(ActionEvent actionEvent) {
        Application application = FacesContext.getCurrentInstance()
                .getApplication();

        List<UIComponent> children = controlPanel.getChildren();

        children.clear();

        for (int count = 0; count < numControls; count++) {
            HtmlOutputText output = (HtmlOutputText) application
                    .createComponent(HtmlOutputText.COMPONENT_TYPE);
            output.setValue(" " + count + " ");
            output.setStyle("color: blue");
            children.add(output);
        }
    }

    public String goodbye() {
        return "success";
    }

}

Saubere Bereitstellung : Der Anwendung ist die Bereitstellung von selbst feinen auf Tomcat 7. Ich habe das bereitgestellte Paket-Struktur auf &tomcat_home%/webapps und alle JSP-Dateien intakt sind im richtigen Platz, wie erwartet.

Ich bin nicht in der Lage, herauszufinden, die Fehler, und was macht 'GoodBye' - button auslösen ?

  • Ich sah Ihre vorherigen Fragen. Sie sind nur gegenüber "seltsamen Problemen". Es ist wahrscheinlicher, dass Ihr Projekt-setup ist nur eine völlig veraltete mess (eeek, web.xml 2.3? faces-config.xml 1.0? JSP?). Empfehle ich Ihnen, werfen Sie alles Weg und neu starten, reinigen Sie Sie mit einem sauberen JSF 2.x gezielte Anleitung. Sie sollten unbedingt darauf achten, dass Sie nicht auf der Suche auf hoffnungslos veraltete JSF 1.x gezielte Anleitungen, wie es ist im Grunde aus dem Leben heutzutage und würde nur zu Verwirrung führen, wenn man für einzelne Fragen/Antworten, die sind meist JSF 2.x gezielt in diesen Tagen.
  • Sie brauchen die Aktion nicht actionListener in Ihrem Abschied commandButton. Besser zu verstehen, zwischen actionListener und action. Studie diese Antwort BalusC stackoverflow.com/questions/3909267/...
  • BaluC, ich mache eine Studie über die beiden JSF-1 & 2 für die nächsten 6 Monate. Sobald ich die Abdeckung mit JSF 1.x ich werde bewegen auf JSF 2.x. Vielleicht brauche ich Ihre Hilfe in Zukunft. Es ist mein großes Interesse zu lernen, die verschiedenen UI-frameworks, seine vergleichende Studie über JSF 1.x & JSF 2.0. Ich bin nicht in der software-Entwicklung. Danke für die Anregung. Ermöglicht in Verbindung.
InformationsquelleAutor bali208 | 2012-12-13
Schreibe einen Kommentar