2013-04-24 43 views
0

我有一個JSP,我在其中使用<fmt:formatNumber>。問題是,我們不知道來自JSP的價值將是一個數字或字符串。如果一個字符串來了,它會拋出NumberFormatException異常。JSP,JSTL,Check NaN

我試圖尋找JSTL,但沒有成功,在某處它被提及如果我檢查值==值它返回false如果字符串,但沒有成功。請參閱下面的代碼。

<fmt:formatNumber type="currency" currencySymbol="$" maxFractionDigits="2" minFractionDigits="2" >${primary.value}</fmt:formatNumber> 

任何幫助,將不勝感激。

在此先感謝。

+0

如果您包含更多代碼以便可以在上下文中查看問題,這將有所幫助。另外,爲什麼你不能控制價值是什麼? – JayDM 2013-04-24 15:08:14

+0

價值來自不同的供應商這就是爲什麼我們沒有任何控制 – Ritesh 2013-04-24 15:13:12

+0

可能重複http://stackoverflow.com/questions/12482062/check-string-for-only-numbers-using-jstl – 2013-04-25 06:10:06

回答

1

這可能是解決您的問題的方法。當您嘗試將字符串添加到0

<c:catch var="catchString"> 
    <c:set value="${0 + primary.value}" /> 
</c:catch> 
<c:choose> 
<c:when test="${not empty catchString}"> 
    ${primary.value} 
</c:when> 
<c:otherwise> 
    <fmt:formatNumber type="currency" currencySymbol="$" maxFractionDigits="2" minFractionDigits="2" >${primary.value}</fmt:formatNumber> 
</c:otherwise> 
</c:choose> 
+0

它的工作原理...但是我們有沒有其他的解決方案..我問這麼大的問題,我們有大約30個這樣的領域..如果你可以建議任何JSTL或類似的東西,那麼代碼行的數量會少一些。 – Ritesh 2013-04-24 15:38:24

+0

你不能把這些領域放在一個循環? 你可以使用三元來擺脫c:choose-tag。 – MMeersseman 2013-04-24 16:21:11

+0

我使用下面提到較少代碼' \t \t \t \t \t $ {primary.value} \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t $ {初級。值} \t \t \t \t \t' – Ritesh 2013-04-24 16:31:13

0

另一種解決方案是創建一個自定義標籤庫,請檢查是否你正在處理一個字符串或一個數字,甚至你會得到一個異常手動格式化您的號碼(您的選擇)。

我沒有時間爲你制定例子,但我發現這 Tutorial 他們在哪裏一步一步解釋如何實現一切。

編輯:更多信息@Oracle

我希望你能得到它的工作,如果不是讓我知道,我會盡力幫助你的明天。