1

WindowsServer2008でTomcat7を使用しています。

JSPページに次の2行があります

<apptags:SQLIteratorTag query="<%=myQuery%>">
</apptags:SQLIteratorTag>

myQuery少なくとも1つの行を返す場合、JSPページは正常に動作します。行が返されない場合myQuery、JSPページはページからテキスト(コンボボックスのコンテンツなど)をコピーして複製します。

私の考えは次のとおりです。コピー元のコンボボックスにはクエリが入力されているため、結果を返すクエリがない場合、ページは別のクエリの結果を取得しているように見えます。

誰かがこれを解決する方法について何かアイデアを持っていますか?ありがとう!

4

2 に答える 2

1

JSP<%...%>本体のスクリプトレットは、多くの場合、乱雑です。これらは、 ELでJSTL @taglibを使用することで完全に回避できます。これは、JSPでクエリ結果を反復するためのクリーンで強く推奨される方法です。 ${...}

jstl-api.jarとjstl-impl.jarをダウンロードし、libフォルダーに入れて、ページの上部に追加します。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

クエリ部分については、すべての処理をJavaクラスに任せ、クエリ結果myListをタイプの変数に格納しList、それをページに送信(get / post forward)します。これにより、値のみが表示され、他には何も表示されません。

<c:forEach items="${myList}" var="product" varStatus="status">
    Product number ${status.count}: ${product}<br />
</c:forEach>

これは、ページでの予期しない動作を回避するのに十分なはずです。行がない場合は、何もしません。ただし、それでも確認したい場合は、結果がすでに内部にあるため、クエリを再度実行する必要はありませんmyList

<c:if test="${fn:length(myList) != 0}">
    <c:forEach items="${myList}" var="product" varStatus="status">
        Product number ${status.count}: ${product}<br />
    </c:forEach>
</c:if>

または、それが本当にあなたの状態である場合は、の${noCompanySelected}代わりに使用してください。${fn:length(myList) != 0}

...確認したいその他の事項:

アプリケーションmyQuery内の別の場所で再利用されています...またはmyQuery、リクエストではなくセッションで作成した場合は、同じページで再帰的に2回再利用されています。

また、taglibapptagsが自分で作成された場合、別の可能性として、タグを操作してはいけない可能性があります。

于 2012-07-01T08:51:05.557 に答える
0

あなたのページをもっと見なければ、次のように同じ変数名を使用していると思います:

%=myQuery%

したがって、クエリ結果が返されない場合は、最後のオブジェクト、つまりコンボ ボックスが返されます。すべての myQuery ではなく、query1、query2 など、クエリ文字列名に別の名前を付けてみてください。

于 2012-06-28T21:57:56.390 に答える