2011-07-14 16 views
1

ページネーションリンクを生成するために使用している非常に単純なカスタムJSPタグがあります。問題は、次のページに移動するためのリンクは、最初のページ(currentPage = 1)の後に表示されないということであるJSP/JSTL: '2> 10' trueに評価

<span id="${id}" class="paginationLinks ${cssClass}"> 
    <c:if test="${currentPage gt 1}"> 
     <!-- Links to previous page(s) --> 
    </c:if> 
    <span class="paginationCurrentPage"> 
     Page ${currentPage} 
     [DEBUG: current=${currentPage}, 
       total=${totalPages}, 
       show=${currentPage lt totalPages} 
       inverse=${currentPage gt totalPages}] 
    </span> 
    <c:if test="${currentPage lt totalPages}"> 
     <!-- Links to next page(s) --> 
    </c:if> 
</span> 

:それは大体のようになります。以前のページに移動するリンクは、すべてのページで正しく機能しています。また、私は私のデバッグブロックからいくつかの本当に奇妙な出力を取得しています:

[DEBUG: current=1, total=10, show=true inverse=false] //first page, correct 
[DEBUG: current=2, total=10, show=false inverse=true] //second page; 2 > 10 == true? wtf??? 
[DEBUG: current=9, total=10, show=false inverse=true] //ninth page, still incorrect 
[DEBUG: current=10, total=10, show=false inverse=false] //tenth page, correct 

currentPagetotalPages、いずれも型longの要求属性であると宣言したタグの属性を経由して、タグに渡されます。だから私は2 > 10 == trueのような狂気の出力を作り出すために間違って何をしましたか?

更新

私は比較にリテラル10totalPagesを交換する場合は正しく動作しますが、それは本当に問題を解決していません。

答えて

1

解決策が見つかりました。

<%@ attribute name="currentPage" required="true" type="java.lang.Long" %> 
<%@ attribute name="totalPages" required="true" type="java.lang.Long" %> 

私が宣言された型なしで両方の属性を文字列として解釈されていたと思われる、とタグがの文字列値間の辞書比較をしていた:私は次のように、明示的に私のタグ属性の型を宣言するために必要な数字。私は、10のリテラル値は、JSPインタプリタが適切な数値型として認識してから、比較の他の引数を自動的に一致するように変換したためと考えられます。

ストーリーが短いので、常にタグ属性にtypeと宣言してください。そうしないと、非常に混乱することが起こります。

+0

あなた自身の質問に答えるための良い仕事。 –