2017-08-16 11 views
0

私は現在、mojarra javax.faces-2.2.8.jarとApache Tomcat 6.0.26 Serverを使用しています。javax.faces:jsf.js resource returns 404

入力フィールドにajaxビヘイビアを追加しようとしています(これは単純化のためのものです)。ここで

は簡単なのFaceletsページ(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> 

は、HTML出力である:

<?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> 

は、これは私の配備記述子である:

インサイド
<?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> 

ブラウザのJavaScriptコンソールこのリクエストがhttp://localhost:8086/JSFCars/javax.faces.resource/jsf.js.xhtml?ln=javax.faces&stage=Developmentで失敗したというメッセージが表示されます404お探しのページが見つかりませんでした)。その結果、入力フィールドのajax動作を呼び出そうとすると、次のメッセージが表示されます。Uncaught ReferenceError:mojarraが定義されていません。

<h:head><h:body>を使用する必要があります。それ以外の場合は、jsf.jsが最初に含まれていません。私はいくつかのブラウザを試して、結果は同じでした。また、myfaces-core-2.0.2-bin jsf実装を試しました。

私は非常によく似た質問を見つけましたhere.問題はjs要求を拒否したユーザー定義フィルターに接続されました。しかし、私は はWebデプロイメント記述子にフィルタを定義しません。その要求をブロックする暗黙的に定義されたフィルタがあるかもしれませんか?あるいは何かがその要求をブロックする理由が他にもありますか?

私はこの質問をして以来、「GlassFish Server Open Source Edition 4.1.2」 サーバをインストールし、それにアプリケーションをデプロイしました(プロジェクトライブラリに「javax.faces-2.2.8.jar」を含めました)。 私はサーバーが内部の "Mojarra 2.2.14" JSF実装を使用していると思います)。 JSFの実装の をテストする方法として、私はテンプレート、複合コンポーネントを使ってみました。 <ui:composition>,<ui:define> 必要に応じてタグとカスタムライブラリの組み込みが行われます。 authentication beanが作成され、faces-congig.xmlを使用して完全に初期化されます。その後、私は と関係のないすべてを削除し、welcome.xhtmlページだけを残しました。もう一度 "404見つからない"というメッセージが表示されます。

解決策は、web.xmlからフェイスサーブレットに接続されているすべてを削除することです。

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

+0

'web.xml'ファイルを見ることができますか? – Kaizen

+0

@カイゼン、私は自分の質問を編集し、 'web.xml'の情報を追加しました。 – stovfl

+0

@カイゼン、あなたの貢献に感謝、私はすでに答えを持っている。 – stovfl

答えて

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

非常に奇妙です....これは何も意味しないだろうが、あなたのウェルカムページがFacesサーブレットを介してロードされます。だから、名前に.xhtmlの拡張子を持つjsf.jsは、自分自身を投稿しただけではありません。 urlパターンを修正するか、デフォルトで大抵の場合はサーブレットの参照をすべて削除して、すべてが動くようにします。

+0

はい、私はあなたに同意します。私は誤って、すべてのfaceletsページをfacesサーブレットにマップする必要があると判断しました。今度は、URLパターンを '/faces/*'に変更しました。これでブラウザは 'welcome.xhtml'リクエストで空白のページを返します。ブラウザのコンソールから、サーバーが 'welcome.xhtml'のソースコードを返したことがわかります。 – stovfl

+0

web.xmlのすべてのfacesサーブレットthingsroを削除するだけです。デフォルトは細かいでしょう – Kukeltje

+0

すべてが完璧に動作し、期待通りです!どうもありがとうございます! :) – stovfl