2012-01-13 24 views
3

我在做一些JSP標記。我將一個類型參數傳遞給標籤。當屬性無效時,我可以在自定義JSP標記中使用JSTL拋出異常嗎?

的代碼如下所示:

<%@ attribute name="type" require="true" %> 
<c:choose> 
    <c:when test="${type eq 'even'}"> 
     <c:set var="remainder" value="0" /> 
    </c:when> 
    <c:when test="${type eq 'odd'}"> 
     <c:set var="remainder" value="1" /> 
    </c:when> 
    <c:otherwise> 
     <%-- Want to throw exception!! --%> 
    </c:otherwise> 
</c:choose> 

我想,如果我傳遞一個錯誤的值拋出異常。當我搜索這個主題時,我發現this。我不能在JSTL中拋出一個正常的異常嗎?

+2

我不認爲你真的需要在用戶界面中引發異常。只要在其他塊中加入錯誤描述即可。 – adatapost 2012-01-13 04:29:44

+0

誰會接受這個例外? – skaffman 2012-01-13 09:24:14

+1

只需立即注意問題 – 2012-01-13 10:23:15

回答

1

只要將注意到問題立即

誰會 「通知」?該異常只能被容器捕獲,並且會導致一些「500內部服務器錯誤」頁面(或者您定義的一些自定義錯誤頁面)。

如果這是你真正想要的,你可以自定義一個標籤,將只執行「拋出新WhateverException()」,然後利用例如自定義標籤庫的:<mytaglib:reportError/>,作爲標準核心標籤庫沒有考慮拋對任何人來說都是一個例外。

1

我只想用一個自定義EL函數或標籤,它系統地拋出一個異常,或顯示一個紅色的大格與錯誤信息,或兩者

${myFn:illegalState("the type must be odd or even but it is " ${type})} 
1

我已經決定恢復和編輯a deleted answer這看起來部分正確。

你就可以把它在一個小腳本像這樣拋出一個異常:

<c:choose> 
    <c:when test="${type eq 'even'}"> 
     <c:set var="remainder" value="0" /> 
    </c:when> 
    <c:when test="${type eq 'odd'}"> 
     <c:set var="remainder" value="1" /> 
    </c:when> 
    <c:otherwise> 
     <% if (true) throw new Exception("Wrong type"); %> 
    </c:otherwise> 
</c:choose> 

然而,你的JSP應該是你的「視圖」層的一部分,所以你應該儘量保持你的邏輯(包括拋出異常)在你的servlet中。

注意if (true)聲明。這是一個詭計,因爲如果您只是將異常腳本放入代碼中,編譯器會抱怨「無法訪問的代碼」。

相關問題