概括地说:我希望 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>
元素内,以便在可解析为数字且该数字 >= 1 时呈现导航navTabsLevel
,否则显示 1 行警告。
如何在不导致“字符串无法解析为数字”错误的情况下执行此操作?