2017-08-16 1 views
0

Ich verwende derzeit mojarra javax.faces-2.2.8.jar und Apache Tomcat 6.0.26 Server.javax.faces: jsf.js Ressource gibt 404 zurück

Ich versuche, ein ajax-Verhalten zu einem Eingabefeld hinzufügen (es ist nur zur Vereinfachung).

ist die einfache facelets Seite (welcome.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:al = "http://xmlns.jcp.org/jsf/composite/AppearanceLibrary" 
     xmlns:h = "http://xmlns.jcp.org/jsf/html" 
     xmlns:ui = "http://xmlns.jcp.org/jsf/facelets" 
     xmlns:f = "http://xmlns.jcp.org/jsf/core"> 
    <h:head/> 
    <h:body> 
     <h:form> 
      <h:outputLabel for = "login" 
         value = "login" /> 
      <h:inputText id = "login" value = "#{authentication.submittedLogin}"> 
       <f:ajax execute = "login" render = "out" /> 
      </h:inputText> 
      <h:outputText id = "out" value = "#{authentication.submittedLogin}" /> 
     </h:form> 
    </h:body> 
</html> 

Hier ist der HTML-Ausgabe:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2"><script type="text/javascript" src="/JSFCars/javax.faces.resource/jsf.js.xhtml?ln=javax.faces&amp;stage=Development"></script></head><body> 
<form id="j_idt4" name="j_idt4" method="post" action="/JSFCars/welcome.xhtml" enctype="application/x-www-form-urlencoded"> 
<input type="hidden" name="j_idt4" value="j_idt4" /> 
<label for="j_idt4:login">login</label><input id="j_idt4:login" type="text" name="j_idt4:login" onchange="mojarra.ab(this,event,'valueChange','j_idt4:login','j_idt4:out')" /><span id="j_idt4:out"></span><input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="o5U6o+AhXUBnlwlaf5BbfJsXNxEe0OmBn+vyQUuLH1If1Hk802YaE1PT+ACraIlE+2rJMXEMJcDEgtaxMDURnPR0EFkR0Pdln4WoUMimfPxwbiCQCQcPfL+JDsPkyx+S6SvffiRyQFmz40B/lF5qtnt+AzzGhkYyuiuokiZVnJYv4hZBVhImLwKLm28dGvVh9qfnpnjngXm8cmAdIVULAY1sn1koFC2Bv702uBK0z9I6jHzMQFdPPCpBd5b+rri7R952i9cfi/CYGdcFSCq1yZGYL0s7E5Dshgaaikr5MVdJ4pRRQbiF60hypro+ZLavymy7G2pMukJNRaMhr7SxZffK13rGuCfpBXzXwdSeXZp2tMpWBhXJZ8gk/7rYzizmMgOTssZtj1inrPAgJdMSu2CJM2Q1xMV5wQSmSpU3bSHWdGknSMH4EGZsipKf8YCr3EsOSPD9khK8hlT5AmLm/iQ0j1xRHJny/6mIPJjVPPN/nD6AXBY+9bdt+SUPEKpT4u8in5ZulcG57t/9NUq/VA==" autocomplete="off" /> 
</form></body> 
</html> 

Dies ist mein Deployment Descriptor:

<?xml version = "1.0" encoding = "UTF-8"?> 
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
     xmlns = "http://xmlns.jcp.org/xml/ns/javaee" 
     xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/javaee 
           http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     id = "WebApp_ID" 
     version = "3.1"> 
    <context-param> 
     <param-name> 
      javax.faces.STATE_SAVING_METHOD 
     </param-name> 
     <param-value> 
      client 
     </param-value> 
    </context-param> 
    <context-param> 
     <param-name> 
      javax.servlet.jsp.jstl.fmt.localizationContext 
     </param-name> 
     <param-value> 
      resources.application 
     </param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <listener> 
     <listener-class> 
      com.sun.faces.config.ConfigureListener 
     </listener-class> 
     </listener> 
    <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>/welcome.xhtml</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
     <welcome-file>welcome.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

Innen die JavaScript-Konsole des Browsers Ich habe die Nachricht erhalten, dass diese Anfrage http://localhost:8086/JSFCars/javax.faces.resource/jsf.js.xhtml?ln=javax.faces&stage=Development mit fehlgeschlagen ist 404 Nicht gefunden). Und als Ergebnis, wenn ich versuche, das AJAX-Verhalten des Eingabefeldes aufzurufen, erhalte ich die folgende Nachricht: Uncaught ReferenceError: mojarra ist nicht definiert.

Ich bin mir bewusst, dass ich <h:head> und <h:body> verwenden sollte, sonst wurde die jsf.js nicht an erster Stelle enthalten. Ich habe mehrere Browser ausprobiert und die Ergebnisse waren die gleichen. Außerdem habe ich die myfaces-core-2.0.2-bin jsf-Implementierung ausprobiert.

Ich habe sehr ähnliche Frage gefunden here. Das Problem wurde mit dem benutzerdefinierten Filter verbunden, die die js Anfrage abgelehnt. Aber ich keine Filter im Web-Deployment-Deskriptor definieren. Könnte es einen implizit definierten Filter geben, der diese Anfrage blockiert? Oder gibt es andere Ideen, warum etwas diese Anfrage blockiert?

Da die Zeit, die ich diese Frage gestellt ich drauf "Glassfish Server Open Source Edition 4.1.2" Server und eingesetzt, um die Anwendung installiert (I enthalten "javax.faces-2.2.8.jar" in Projektbibliotheken, aber ich denke, dass der Server die interne "Mojarra 2.2.14" JSF-Implementierung verwendet. Als Testmethode der JSF-Implementierung habe ich versucht, eine Vorlage, eine zusammengesetzte Komponente zu verwenden. <ui:composition>, Tags und benutzerdefinierte Bibliothek Einschluss arbeiten nach Bedarf. authentication Bean wird erstellt und perfekt initialisiert mit faces-congig.xml. Dann habe ich danach alles entfernt, was nicht mit in Verbindung steht und verließ nur welcome.xhtml Seite. Wiederum bekam ich "404 Not found".

Die Lösung besteht darin, alles, was mit Faces-Servlet verbunden ist, aus dem web.xml zu entfernen.

The view of the rendered welcome.xhtml page after applying the solution

+0

Können wir Ihre 'web.xml' Datei anschauen? – Kaizen

+0

@Kaizen, Ich habe meine Frage bearbeitet und Informationen der 'web.xml' hinzugefügt. – stovfl

+0

@Kaizen, danke für deinen Beitrag, ich habe schon die Antwort. – stovfl

Antwort

1
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/welcome.xhtml</url-pattern> 
</servlet-mapping> 

ist sehr seltsam .... Das ist nichts bedeuten würde, aber Ihre Begrüßungsseite über den Faces Servlet geladen wird. So ist die jsf.js, die eine .xhtml-Erweiterung im Namen sowie Sie selbst gebucht hat, auch nicht. Korrigieren Sie das URL-Muster (oder entfernen Sie alle Faces-Servlet-Referenzen, da die Standardwerte meistens in Ordnung sind) und alles funktioniert

+0

Ja, ich stimme dir zu. Ich habe fälschlicherweise entschieden, dass ich alle Facelets-Seiten dem Faces-Servlet zuordnen sollte. Jetzt habe ich das URL-Muster in '/faces/*' geändert. Jetzt gibt der Browser eine leere Seite auf der 'welcome.xhtml' Anfrage zurück.Aus der Browser-Konsole sehe ich, dass der Server den Quellcode für die 'welcome.xhtml' zurückgegeben hat. – stovfl

+0

entfernen Sie einfach alle Gesichter Servlet Datesro, die web.xml. Standardeinstellungen sollten in Ordnung sein – Kukeltje

+0

alles funktioniert perfekt und wie erwartet! Ich danke dir sehr! :) – stovfl

Verwandte Themen