廣泛地說:我想在JSTL Core <c:when>
標記中的測試返回false,如果:
- 一個變量不能被解析爲一個數字;或
- 將相同變量與數字文字進行比較是錯誤的。
我知道在某些情況下變量不會被解析爲數字;這不應該導致錯誤。使用-情況如何進行數字比較,但如果無法解析爲數字,則返回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>
這可以在普通頁面瀏覽中始終如一地工作。
但是,當門戶搜索集合正在更新(每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
是可解析爲一個數字,這個數字是> = 1,否則顯示1行警告。
我該如何做到這一點,而不會導致「字符串不能解析爲數字」錯誤?
謝謝。當我能夠測試它(在生產服務器上等待下班時間)時,我會標記爲已回答,但已提高了答案,因爲無論您是否增加了我的JSTL和EL知識。 –
在鏈接問題和Google搜索之後,我使用TLD文件定義了自定義EL函數,如http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions -in.html。我做了一個名爲parseDoubleDef的Java方法,它接受一個String和一個double。如果它可以將String解析爲double值,則返回該值,否則返回double參數。 –