質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

GlassFish

GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

受付中

JSF1.2使用Webアプリ(Chrome)の/ja-jp/suntheme.jsの404エラーを解決したいです。

RaigaSouhi
RaigaSouhi

総合スコア4

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

GlassFish

GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

0回答

0評価

0クリップ

1489閲覧

投稿2020/04/14 12:56

前提・実現したいこと

IEで動いていたアプリのChrome・Edge対応を行っています。
onShowModalDialogが廃止となっているため、window.openをコールバック関数を使用して子画面を開くよう修正しました。
うまく動いたと思ったのですが、ボタン押下前の状態が特定のときだけ子画面が閉じなくなりました。

デバッガーを開いたところ、Failed to loadとUncaught TypeErrorのメッセージが出ていました。
探したところFailed to loadはbootstrap.jsのGETのところで赤線が引かれ、上記エラーとXMLHttpRequestの非推奨警告(これもどうにかしないといけない)が出ていました。
2つ目のエラーはどこで発生したのか辿れていませんが、1つ目のメッセージの箇所までは出てきていない&load時には消えているため、404エラー由来のものではないかと思っています。(functionがないって言ってるんだろうなと思っています)

Failed to loadエラーが解決しなくても、IEと同様の動作をChromeでもすることが最優先となっています。
JSF1.2からバージョンを上げる等の構成を変える回避策は取れません。(私にその権限がないです)
回避すら無理な場合は、その理由もしくはこの辺りを調べるといいというのを教えていただきたく思います。

発生している問題・エラーメッセージ

Failed to load resource: the server responded with a status of 404 (プロジェクト名/theme/com/sun/webui/jsf/suntheme4_2-08320/javascript/theme/nls/ja-jp/suntheme.js) Uncaught TypeError: window.opener[callback_id] is not a function at 画面名.jsp at HTMLInputElement.eval (eval at webui.suntheme4.2.widget.widgetBase setEventProps (webui.js)

該当のソースコード

実際のソースを持ってくるわけにはいかないため、当ソースコードは概要でしかないことを悪しからずご了承ください。
(ダミーを作ろうにも実行環境が投稿時になく、メモと記憶を頼りに省略もありで書いてあります)
JSFのタグについても正確な記述ではありません。

処理の流れとしては以下の通りです。
1.親画面にて「ボタン」を押下し、モーダルで子画面を開く。
2.子画面で「テキストボックス3」に値を入力し「子ボタン」を押下し親画面に値を引き渡すとともに画面を閉じる
3.親画面にて子画面から受け取った値をテキストボックス1に設定、サーバでの処理後テキストボックス2にフォーカスを当てる

■□■親画面■□■ [テキストボックス1][ボタン][テキストボックス2] <script> function funcBlur() { // 下準備してサーバに処理を移譲 } funcOpenWindow(param) { // callback関数を利用してonShowModalWindow()をwindow.openで開くよう修正 } </script> <h:inputText value='#{bean.id}' onblur='funcBlur()'/> <!-- <h:commandButton onclick='funcOpenWindow(引数の設定);return false;' value="ボタン" /> --> <h:commandButton onmousedown='funcOpenWindow(引数の設定);return false;' value="ボタン" /> <h:inputText value='#{bean.id}'/> ■□■子画面■□■ [テキストボックス3][子ボタン] <script> function funcReturnVal(param) { var callback_id = window.name; window.opener[callback_id](param); window.close(); } </script> <h:inputText value='#{bean.id}'/> <h:commandButton onmousedown='funcReturnVal("テキストボックス3の値");return false;' value="子ボタン" />

試したこと

IEとChromeで比較実行した際は以下の通りになりました。
1.テキストボックス1未入力&フォーカステキストボックス1で「ボタン」押下し処理開始→正常
2.フォーカステキストボックス2で「ボタン」押下し処理開始→正常
3.テキストボックス1入力済み&フォーカステキストボックス1で「ボタン」押下し処理開始→異常

同じ処理でも開始時の条件によって結果が異なり、IEとChromeで差異があった3.では
子画面・funcReturnVal(param)のwindow.openercallback_id;の箇所→F11
bootstrap.jsのGETにてエラーによりJavaScript停止
子画面がリロードされる
となりました。

エラーの原因となっているbootstrap.jsにブレークポイントを置いて1~3のパターン時にエラー個所を通っているか調べようともしたのですが、メモリの関係上bootstrap.jsで応答待ちになってしまい正確なところはわかりませんでした。
しかし、onloadとwindow.closeの箇所においたものについては、正常に終了した1と2は止まったものの、3はwindow.closeでは止まらずonloadのブレークポイントにて止まりました。

いろいろ調べてみたのですが、JSFの使用は初めてかつ既存プロジェクトのため勝手がわからず、上記の404エラーがIEとChrome間差異の原因なのかすら分かりません。

404エラーは……/ja-jp/suntheme.jsファイルが存在しないということは理解しデバッガーでも存在していなかったため、そりゃ出るわなぁという気持ちではあります。
ライブラリもsuntheme.jarとsuntheme_ja.jarしか登録しておりません。
インターネットでsuntheme_ja-jp.jarがないか探してみたのですが、見当たりませんでした。
(そもそも存在しないのかもしれませんが)
またIEでは404エラーが出ていなかったのにChromeでは起動初期表示画面から出ているので、ブラウザ差なのかなと思っています。

jspファイルのjsp:rootタグ内にあるlangが"ja-JP"だったので、それを"ja"に変えて実行してみましたが変わりませんでした。(変更したのが1画面だけだったのもあるかもしれません)
langはja-JPのはずなのにFailed to loadエラーがIEでは出ない理由もまるで分かりません。

長々と質問してしまい申し訳ありません。
どうか問題解決の糸口を見つけるご協力をよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

JSF1.2
GlassFish v2.1
NetBeans IDE 6.5.1
JavaEE JDK 1.6.0_13
Chrome80.0.3987.163 officalBuild 32ビット
(この構成おかしい、というのがあれば教えてください。メモが誤っている可能性が高いです)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

GlassFish

GlassFishは、Java EE準拠のアプリケーションサーバの名称です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。