0

DAO レイヤーでネイティブ クエリを作成する spring+hibernate アプリケーションがあります。クエリは次のようになります

select name, amount from myTable where id=:id

選択したフィールドが異なるデータ型 (文字列、数値) であることは明らかです。

JSP では、返された結果をテーブルに出力したいのでforeach loop、返されたセットの各レコードを使用しています。

中括弧の間に負の数を入れたいので、次のコードを使用しています

<c:forEach var="item" items="${resultSet}">
                    <tr>
                        <c:forEach var="v" items="${item}" varStatus="st">
                                    <td>
                                <c:choose>
                                    <c:when test="${v != null}">
                                        <c:choose>
                                            <c:when test="${v<0}">
                                                <c:out value="(${v})"></c:out>
                                            </c:when>
                                            <c:otherwise>
                                                <c:out value="${v}"></c:out>
                                            </c:otherwise>
                                        </c:choose>
                                    </c:when>
                                    <c:otherwise>
                                        <c:out value="-"></c:out>
                                    </c:otherwise>
                                </c:choose>
                            </td>
                        </c:forEach>
                    </tr>
                </c:forEach>

クエリの最初の項目は文字列であるため、このコードは NumberFormateException を発生させます。

この問題に対する 2 つの解決策を知っています。1 つ目は SQL クエリに中かっこを入れる方法ですが、アプリケーションには多くのクエリが含まれており、すべてのクエリを変更するには多くの時間がかかるため、このソリューションは使用できません。

2 番目の解決策は、resultTransformer を使用して、返されたデータを 1 つのオブジェクトに変換することですが、これは前と同じ理由で適切ではありません。

この問題を解決するための回避策はありますか?

4

1 に答える 1

0

このように試しましたか??

 <c:when test=${v<0}>
            <c:out value="(${v})"></c:out>
                     </c:when>
            <c:otherwise>
             <c:out value="${v}"></c:out>
于 2013-03-19T12:27:11.010 に答える