Verhindern suffix Hinzugefügt wird, um Ressourcen, wenn die Seite geladen ist

Ich habe einen JSF2-Anwendung laufen und arbeiten kein problem. Das Problem habe ich mit JSF ist mit dem Ressource-bundle. Alle Ressourcen haben, die .xhtml suffix angehängt. So main.css wird main.css.xhtml wenn im browser geladen. Ich möchte es so haben das .xhtml ist nicht apended auf die Ressourcen (nicht Geist über die Seiten selbst).

Ist es eine Möglichkeit, wo wir können NICHT haben .xhtml angehängt Ressourcen?

Ich würde im Idealfall nicht ändern, die interne Funktionsweise der Website. Ich habe Ideen unten aufgeführt, aber ich muss sagen, ich weiß nicht wirklich, wie diese. Hoffnung für eine Lösung irgendwo?

Ich bin mit Majorra v. 2.1.17 auf Glassfish 3.1.2.2.

Aktuelle Faces Servlet laden wie in web.xml (aktualisiert)

<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>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>

, Warum diese Fragen von anderen unterscheidet

Argumentation

Sicher, Sie könnte mich Fragen, warum brauche ich das. Gut, wir verschieben unsere Anwendung, um bedient zu werden, die von der Akamai-CDN.

Das Problem, das wir mit der integration des Standortes ist, dass wir versuchen, den cache für statische Inhalte auf dem edge-Server. Dies geschieht durch die entsprechenden Datei-Erweiterungen ("ie: .js, .doc .png, css, etc). Wir können nicht übereinstimmen xhtml denn dies würde die Zwischenspeicherung werden alle Seiten als statische Inhalte. Die durch, die Probleme verursacht, mit Sitzungen und so.

Lösungsversuch

Im Einklang mit der Antwort von BalusC, ich habe implementiert die Ressource-handler wie vorgeschlagen. Ich will nicht code umgeschrieben werden hier, da es in der Antwort weiter unten.

Aber ich erhalte eine Fehlermeldung beim laden von composite-Bauteilen. Ich erhalte eine Fehlermeldung wie folgt :

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:975)
    at com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler.createComponent(CompositeComponentTagHandler.java:162)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:494)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:169)
...

Composite-Komponente ist ordnungsgemäß geladen, weil, wenn ich "Abmelden" die neue ResourceHandler wir gerade erstellt laden. Der stack-trace führt mich zu glauben, dass es versucht, zu finden diese Komponente in eine java-Klasse, statt finden Sie in den Ressourcen. Nach grepcode dies wäre an dieser letzten Zeile (975), wo der Fehler passiert :

String packageName = componentResource.getLibraryName();
String className = componentResource.getResourceName();
className = packageName + '.' + className.substring(0, className.lastIndexOf('.'));

Bedeutung, dass die resourceName aka className ist null da der Fehler bin ich immer java.lang.NullPointerException. Ich kann nicht scheinen, um herauszufinden, wie/wo die ResourceHandler genannt wird vis-a-vis einer composite component. Jede Hilfe, herauszufinden, in dieser letzten Ausgabe?

  • Erstellen Sie eine benutzerdefinierte Ressource-handler.
  • so etwas in der Art würde das dann machen (in einer css-Datei zum Beispiel) so etwas wie dieses : background: #14311b url("#{resource['templateImages:background.jpg']}") no-repeat 0 0; funktioniert nicht, da jsf würde nicht ausgeführt werden, auf "nicht-xhtml" - Dateien. Wäre es dann eine gute Idee, fügen Sie "*.css" als Muster für die jsf-servlet? Oder benutzen Sie einfach die statische Holen? Was ist mit Ressourcen, die sich in ln=javax.faces?
  • Eine benutzerdefinierte Ressource-handler würde ermöglichen es Ihnen, hinzufügen /javax.faces.resource/* zu faces servlet mapping.
  • Wenn ich dies Tue, ich dachte, ich wäre in der Lage, Zugang zu meinen Ressourcen als solche : http://localhost:8080/myApp/javax.faces.resource/main03.css?ln=styles. Dies funktioniert nicht, aber http://localhost:8080/myApp/javax.faces.resource/main03.css.xhtml?ln=styles tut. Ich weiß, ich bin etwas fehlt.
  • Korrektur. Also es war mein Missverständnis, dass nur hinzufügen das Präfix, wäre ich noch mit ihm in der gleichen Weise. So /javax.faces.resource/* Hinzugefügt servlet-mapping. Aber jetzt : javax.faces.resource/resources/styles/main03.css Zugriff auf dieses Blatt, das stylesheet ist noch nicht verarbeitet werden durch jsf
  • Wie gesagt in der 1. Kommentar, erstellen Sie eine benutzerdefinierte Ressource-handler.
  • Ich habe bearbeitet die Frage, um zu zeigen ein bisschen besser, was ich Tat und meine Umsetzung von dem, was ich denke, meine benutzerdefinierte Ressource-handler Aussehen würde. Aus den Kommentaren habe ich das Gefühl, etwas zu verpassen, ich appologize für diese, die vielleicht trivial erscheinen. (jede Hilfe ist sehr geschätzt).
  • Nein, es ist nicht trivial 🙂

Schreibe einen Kommentar