2011-05-12 77 views
6

在我的JSP这样做时,我得到EL解析异常?嵌套EL功能

谢谢。

更新:

这是例外:

view.jsp(86,94) --> JSPG0122E: Unable to parse EL function ${fn:substring(name, fn:length(MYPREFIX), fn:length(name)}). 

at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateElFunction(ELValidator.java:500) 
at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:122) 
at com.ibm.ws.jsp.translator.visitor.validator.ELValidator.validateELExpression(ELValidator.java:149) 
at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttribute(ValidateVisitor.java:1752) 
at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateCustomTagAttributeValues(ValidateVisitor.java:1400) 
at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitCustomTagStart(ValidateVisitor.java:294) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:366) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:369) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processChildren(JspVisitor.java:419) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:234) 
at com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:216) 
at com.ibm.ws.jsp.translator.JspTranslator.processVisitors(JspTranslator.java:127) 
+0

看起来很好,只是在Tomcat 7.0.12上测试过,效果很好。你到底有什么异常?可能'$ {name}'根本不是'String'。 – BalusC 2011-05-12 21:44:26

+0

我在上面的原始发布中添加了例外。 – user751383 2011-05-12 21:51:01

回答

2

Aaahh,它的WebSphere ......这已经是很久以前我用它在过去,我没有一个运行在这里,所以这里是一个在黑暗中拍摄:

尝试了重构嵌套函数为单独<c:set>秒,然后在表达,而不是引用它们:

<c:set var="begin" value="${fn:length(MYPREFIX)}" /> 
<c:forEach var="name" items="${data.names}" varStatus="status"> 
    <c:set var="end" valur="${fn:length(name)}" /> 
    <c:set var="reducedName" value="${fn:substring(name, begin, end)}"/> 
    ... 
</c:forEach> 

请注意,原代码在Tomcat 7.0.12中对我很好。所以如果有空间的话,可以考虑将Websphere升级到更新的版本。它可能已在更高版本中得到修复。

+0

终于找到了: 导入 <(%)= InternalConstants.MYPREFIX%> 不能被解析,所以MYPREFIX不使EL失败的字符串。 奇怪的是,我没有得到一个例外的错误导入第一(嗯,也许我已经监督它)... – user751383 2011-05-12 22:16:48