概括地说:我希望JSTL Core <c:when>
标记中的测试返回false,如果:
- 变量不能解析为数字;或
- 将同一变量与数字 - 字面值进行比较是错误的
我知道在某些情况下变量不能被解析为数字;这不应该导致错误。
用例详情......
我在WebSphere Portal v7服务器上的JSP文件中有以下内容。此JSP由配置为使用IBM Web Content Manager JSP组件的Web Content portlet呈现。
<%@ page session="false" buffer="none" %>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v7.0/json" prefix="json" %>
<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v7.0/portal-fmt" prefix="portal-fmt" %>
<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v7.0/portal-core" prefix="portal-core" %>
<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v7.0/portal-navigation" prefix="portal-navigation" %>
<%@ page import="com.isw.portal.theme.SideNav" %> <%!
SideNav iswSideNav=SideNav.getInstance();
%>
<portal-navigation:navigation startLevel="${navTabsLevel}" stopLevel="${navTabsLevel+3}">
<%=iswSideNav.getNavHTML(wpsNavModel,wpsSelectionModel,request,response) %>
</portal-navigation:navigation>
这在普通页面浏览量上始终如一
但是,当正在更新Portal Search集合时(每6小时自动发生一次并且大约需要2分钟),此JSP每秒会产生几个例外。
例外总是与下面重复的两个相同。第二个异常总是包含一个堆栈跟踪,除了说明NumberFormatException消息的行之外,我已经省略了它。
NavigationTag E com.ibm.wps.engine.tags.NavigationTag setStartLevel EJPEJ0027E: StartLevel less than 1 is ignored.
NavigationTag E com.ibm.wps.engine.tags.NavigationTag setStartLevel EJPEJ0026E: StartLevel is not a valid number.
java.lang.NumberFormatException: For input string: ""
由于这些异常似乎不会导致任何功能问题,我想将<portal-navigation:navigation>
元素包装在<c:choose>
元素中,以便在navTabsLevel
可解析时呈现导航作为一个数字,该数字是&gt; = 1,否则显示一行警告
如何在不导致“字符串无法解析为数字”错误的情况下执行此操作?
答案 0 :(得分:2)
你可以使用<c:catch>
。
<c:catch var="exception">
<portal-navigation:navigation startLevel="${navTabsLevel}" ... />
</c:catch>
<c:if test="${not empty exception}">
Handle fail.
</c:if>
或者,更好的是,创建一个custom EL function,例如matches()
,isNumber()
等。
<c:choose>
<c:when test="${my:isNumber(navTabsLevel)}">
<portal-navigation:navigation startLevel="${navTabsLevel}" ... />
</c:when>
<c:otherwise>
Handle fail.
</c:otherwise>
</c:choose>
standard JSTL functions中至少没有可用的内容。