2011-05-12 19 views
6

Me estoy haciendo excepciones de análisis de EL cuando se hace esto en mi JSP:funciones de anidamiento EL

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@page import="my.InternalConstants"%> 

[...] 

<c:set var="MYPREFIX"><%=InternalConstants.MYPREFIX%></c:set> 

[...] 

<c:forEach var="name" items="${data.names}" varStatus="status"> 
    <c:set var="reducedName" value="${fn:substring(name, fn:length(MYPREFIX), fn:length(name))}"/> <-- here is where the exception occurs 

¿qué estoy haciendo mal?

Gracias.

Actualización:

Ésta es la excepción:

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

Se ve bien, acaba de probarse en Tomcat 7.0.12 y funciona bien. ¿Qué excepción exactamente estás obteniendo? Probablemente '$ {name}' no es un 'String' en absoluto. – BalusC

+0

Agregué la excepción a la publicación original anterior. – user751383

Respuesta

2

Aaahh, es Websphere ... Ha sido hace mucho tiempo he usado durante la última y no tengo uno corriendo aquí, así que aquí tiene una sesión en la oscuridad:

Trate de refactorizar las funciones anidadas a cabo en distintos <c:set> s y luego hacer referencia en la expresión en su lugar:

<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> 

Tenga en cuenta que el código original funciona bien para mí en Tomcat 7.0.12. Entonces, si hay espacio, considere actualizar Websphere a una versión más nueva. Podría haber sido corregido en lanzamientos posteriores.

+0

finalmente lo encontramos: La importación <% =% InternalConstants.MYPREFIX> no se pudo resolver, por lo MYPREFIX no era una cadena que causa el EL falle. Extraño que no obtuve una excepción para la importación errónea primero (hm, tal vez lo he supervisado) ... – user751383

Cuestiones relacionadas