22

次のようなjspページがあります。

MyPage.jsp

<%@ include file = "/Title.jsp" %>
<%@ include file = "/Header.jsp" %>
<html>...</html>

Title.jsp には、"user" のインスタンスがあります。たとえば、次のようになります。

User user = new User();

Header.jsp ユーザーは次のように参照されます。

user.setName("John");

Eclipse は、header.jsp ファイルで「ユーザーを変数に解決できません」というエラーを表示しています。その理由は完全に理解しています。この特定の変数について、この特定のエラーを無視するように Eclipse に指示する方法はありますか? ここで何かできることはありますか?

職場では、実際には Web アプリケーションである古い (そして大きくて醜い) Java アプリケーションをサポートしています。この Java プロジェクトを Java 動的 Web プロジェクトに変換しようとしています。私がそれを変換する前は、どういうわけか Eclipse はあちこちにあるこれらのぶら下がっている変数を気にしませんでした。現在、動的 Web プロジェクトでは、Eclipse が不平を言っています。

コードを書き直すことは論外です。各 jsp ファイルは、多数のグローバル変数を含む複数のインクルードで構成されています。必要以上に触らない。

4

2 に答える 2

33

ベストプラクティス

理想的には<% // scriptlet %>、JSP 内にブロックを含めないようにする必要があります。

JSP は、単純に Java コードを標準アクションとカスタム タグの背後に隠すことから、式言語、JSTL、そして現在は OGNL 式を使用して、アプリケーション スコープのいずれかで利用可能な事前入力された JavaBeans から結果を取得する (処理されたばかりの要求に対して) まで、大きく進化しました。 (セッション、リクエスト、ページなど) または高度なデータ ストア (Struts 2 の ValueStack など)。

したがって、適切な解決策は次のようになります(「ユーザー」参照が必要なため、EL を使用できません)

 <jsp:useBean id="user" class="foo.User" /> <!-- scope="page" by default -->

このコード行を追加するTitle.jspと、新しいUserBean が作成され、pageスコープに追加されます。この同じコード行は、スコープから Bean をHeader.jsp取得し、ファイルの残りの部分で使用できる名前の参照を与えます。 .Userpageuser

しかし、残りの Java コードはタグ付きで書かれていないため、あまり意味がありません。したがって、<% // scriptlet %> ブロックの 1 つを使用して、2 つの JSP 間で Bean をリクエスト属性として単純に渡すこともできます。

<% // in Title.jsp
  request.setAttribute ("user", new User());
%>

<% // in Header.jsp
  User user = request.getAttribute ("user");
  user.setName ("John Doe");
%>

答え

コード ベースが大きすぎて回収できない場合、ベスト プラクティスを使用してもまったく実用的ではありません。JSP 構文検証エラーを無視するように Eclipse IDE を構成するか、JSP フラグメントまたは特定のファイルとフォルダーに対してのみエラーを無効にすることができます。

ワークスペースで Web プロジェクトを選択して、 に進みますProject > Properties > Validation > JSP Syntax。次に、以下に示すようEnable project specific settingsにオフにします。Validate JSP fragments

フラグメントの JSP 検証オフ

JSP フラグメントは.jspf、JSP/HTML セグメントを含むファイルであり、ヘッダー タグを開いたり閉じたりする必要はありません (もちろんヘッダーまたはフッター フラグメントでない限り)。したがって、.jspfEclipse がファイルをフラグメントとして認識する (検証しない) ようにするには、ファイルの名前を に変更する必要があります。主な利点は次のとおりです。

  • ファイルは、フォルダー構造のどこにでも置くことができます
  • 拡張子は、それがインクルードであることを明確に示しています
  • 新しいフラグメントは自動的に識別されます

インクルード ファイルの数が膨大であるか、何らかの理由で名前を変更できない場合、次善の策は、それらを別のフォルダー ( などincludes) に移動し、そのフォルダー自体を JSP 構文検証から除外することです。

再度、[プロジェクト] > [プロパティ] > [検証] に移動し、プロジェクト固有の設定を有効にして、設定[...]にアクセスするための参照タイプ ボタンをクリックしJSP Syntax Validatorます。

検証設定

ここでは、最初に を作成してExclude Groupから、フォルダ(画像のWebContent/includesなど) を JSP 構文検証からAdd Rule除外します。

除外フォルダ

これで、Eclipse は、この include フォルダーにドロップされた JSP ファイルのエラーを報告しなくなりまし個々のファイルにも同じアプローチを使用できますが、それがどれほど実用的かは、そのようなフラグメントがいくつあるかによって異なります。

参考文献:
JSP ファイルで Java コードを回避するには?

于 2013-05-24T17:37:38.000 に答える
5

あなたの質問に対して: この特定の変数について、この特定のエラーを無視するように Eclipse に指示する方法はありますか? 上記のように、エラーは Eclipse の検証フレームワークから発生しています。あなたができる最善のことは、そのエラーやその変数ではなく、そのファイルを無視するようにEclipseに指示することです。これを行うには、プロジェクトを右クリックして、そのプロパティ ダイアログを表示します。そこで「検証」を選択し、「プロジェクト固有の設定を有効にする」のチェックボックスをクリックします。そこから、特定の検証をオンまたはオフにすることができます。個人的には、Eclipse バリデーターはそれほど有用ではなく、かなりの処理時間がかかるため、ほとんどすべてをオフにしています。ただし、「設定」列を介して細かい制御が可能です。

これが役立つことを願っていますが、以前のコメントの詳細のみを提供します。

于 2013-05-24T15:16:59.287 に答える