Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順
struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問題が発生しているプロジェクトを例に挙げます。
アクションは次のとおりです。

コードをコピー
コードは次のとおりです。

<アクション名="listUser" クラス="listUserAction">
<結果>/users/userList.jsp</結果>
</アクション>

(: listUser の機能は、すべてのユーザーを検索し、それらを userList.jsp のユーザーの下に表示することです。spring が使用されているため、ここでの「listUserAction」は applicationContext.xml で設定された名前です)
userList.jsp の CSS 設定は次のとおりです

コードをコピー
コードは次のとおりです。

<link href="../css/style.css" rel="スタイルシート" type="text/css" />

(: ディレクトリ階層は次のようになります。WebRoot の下には users フォルダと css フォルダがあるため、users の下の jsp が style.css を呼び出す場合は、ルート ディレクトリに移動して css フォルダを見つける必要があります)
ただし、listUser から正常に実行した後に、プログラムが /users/userList.jsp にジャンプすると、/css/style.css が機能しません。アドレスバーに直接 jsp を表示した場合は正常に表示されます。
インターネットで見つかった方法では、 CSS に絶対パスを使用するように書かれています

コードをコピー
コードは次のとおりです。

<link href="http://blog.163.com/<%=request.getContextPath%>/css/style.css" rel="スタイルシート" type="text/css" />

しかし、これには明らかな欠点があり、それは携帯性が悪いということです。
結果を <result>userList.jsp</result> に変更し、jsp をルート ディレクトリに置くと、このような問題は発生しません。この時点で、問題の原因はほぼわかっています。つまり、アクションがルート ディレクトリにあります。プログラムを実行するときにアドレス バーから確認できます。つまり、名前空間がルート ディレクトリにあり、"../css/style.css" は当然見つかりません。
問題を理解すれば、解決策は簡単に見つかります。 listUser が設定されているパッケージを見つけて、namespace="/users" を追加します。今がその時だ

コードをコピー
コードは次のとおりです。

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts 構成 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<ストラット>
<パッケージ名="users" は、="struts-default" 名前空間="/users"> を拡張します。
......
<アクション名="listUser" クラス="listUserAction">
<結果>/users/userList.jsp</結果>
</アクション>
......
</パッケージ>
</strusts>

その後、サーバーを再起動すると、正常に表示されます。同時に、アドレスバーのアクションの前に「/users」が追加されていることもわかります。また、接続されたビデオにジャンプする場合も「/users/userList.jsp」になるため、一貫性が保たれ、問題が解決されます。

<<:  MySQLにおける遅いSQLの最適化の方向性について詳しく話しましょう

>>:  Intellij IDEA による Docker イメージの展開方法の手順の迅速な実装

推薦する

div要素に丸い境界線を追加する方法

以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...

ボタンの 4 つのクリック応答方法の概要

ボタンは頻繁に使用されます。ここでは、イベント処理メソッドを整理し、実装方法が多数あることを発見しま...

MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能

序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...

ウェブページでよく使用される共有コードの完全なリスト(フロントエンドに必須)

コードをコピーコードは次のとおりです。 1. 新浪微博<a href="http:/...

Expressはログイン認証を実装

この記事では、ログイン認証を実装するためのExpressの具体的なコードを例として紹介します。具体的...

WeChatアプレットがチャットルーム機能を実現

この記事では、参考のために、WeChatアプレットのチャットルームを実装するための具体的なコードを例...

Clickhouse Docker クラスターの展開と構成を例を使って説明します

目次前面に書かれた環境の展開Zookeeper クラスタの展開Clickhouse クラスターの展開...

Mysql general_log をクリーンアップする方法の概要

方法1: グローバル general_log を 'OFF' に設定します。 テーブ...

Windows サーバー ファイルをローカルにバックアップする方法、Windows サーバー データ バックアップ ソリューション

重要なデータはバックアップする必要があり、リアルタイムでバックアップする必要があります。そうしないと...

仮想マシンのLinux初心者がIPを設定し、ネットワークを再起動する

仮想マシンを初めて使用する方や、仮想マシンに Linux をインストールしたばかりの方は、システムが...

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

フロントエンド JavaScript におけるリフレクションとプロキシ

目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...

方言変換のためのApache Calciteコード

意味Calcite は、Sql を SqlNode に解析し、次に SqlNode を特定のデータベ...