这两天在进行系统迁移的时候,源系统使用的websphere版本是6.1.0.29
,新的系统使用的websphere版本是6.1.0.0,然后就出现莫名其妙的问题了。
javax.servlet.ServletException: No function is mapped to the name "fn:contains"
几经测试,谷歌多次才明白是由于websphere对jstl的支持问题。
具体原因是由于websphere有些版本不支持fn标签的取反,以下是我的代码
<c:if test="${!fn:contains(user.userNO,'blank')&&!fn:contains(user.userNO,'default')}"> (代理) </c:if>
准备修改的时候,才发现c标签没有else,jstl也够极品的
于是修改成如下
<c:choose> <c:when test="${fn:contains(user.userNO,'default')||fn:contains(user.userNO,'blank')}"> <!-- webspehere6.0不支持fn标签取反,所以就这样了 --> </c:when> <c:otherwise>(代理)</c:otherwise> </c:choose>
问题得到解决,上来吐槽下websphere的兼容性
如果你不能忍受?果断的换struct标签吧
<s:if test="user.userNO!='blank' && user.userNO!='default'"> (代理) </s:if>