2012-01-13 18 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)声明。这是一个诡计,因为如果您只是将异常脚本放入代码中,编译器会抱怨“无法访问的代码”。

相关问题