3

jspにファイルを含めることについて知っているように...私は2つのファイルを持っています

1.jsp 2.jsp

two.jspで私は以下のコードを持っています

Long something = 0;

one.jsp コードでは

<%@include file='two.jsp'%>
<%@include file='two.jsp'%>

同じファイルを 2 回インクルードしましたが、

何か変数が2回作成されるため、エラーが発生しますよね?

つまり、ファイルを2回目に含める前に確認する必要があることを意味します。一度含まれている場合は、再度含める必要はありません。

php のように include("file.php"); のような関数があります。//ファイルが含まれます

および include_once("file.php"); //以前に含まれていなかった場合、これにはファイルが含まれます。

そのためのANY ANYソリューション????

4

1 に答える 1

2

実際、これら 2 つの静的インクルードがあると、同じ変数が 2 回宣言されているというエラーが発生します。これらのインポートは、コンパイル時に、インクルード ページのコードをインクルード ページに追加し、その後、完全にコンパイルされます。

私はinclude_onceJSPに組み込まれたアプローチを知りませんが、トップレベルページで変数として宣言された、またはリクエスト属性として宣言されたグローバルSet(つまり、HashSet処理が終了したとき) に、既に含まれているページの名前を追加できます。

one.jsp

<% HashSet<String> pagesSet = new HashSet<String>(); %>
...
<%@include file='two.jsp'/>

two.jsp

<% if (!pagesSet.contains("two.jsp"){ %>
   //... Remember to actually ADD two.jsp to pageSet, 
   // because it IS being included NOW.
   pageSet.add("two.jsp");

   // Entire contents of two.jsp
   // ....
<% } %>

これは#ifndef #define #endifC のパターンとよく似ていることに注意してください。

動的インクルードを使用すると、変数が重複する問題を回避できることを考慮してください。インクルードされたページは独自のスコープで実行され、サーバー側の変数にアクセスするには、またはスコープ<jsp:param>のいずれかを使用して、またはいずれかでそれらを渡す必要があります。静的インクルードと動的インクルードの違いについては、この質問の回答を参照してください: include ディレクティブと属性名の問題RequestSessionApplication

さらに、これらの「条件付き」静的インクルードが多数ある場合、64K メソッドの制限に達する可能性があります。

于 2011-10-16T08:53:38.277 に答える