2011-05-12 75 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