Pentaho 7.1中JSTL标签EL表达式求值异常及URL截断问题
解决Pentaho 7.1中JSTL <c:url>标签内EL表达式截断问题
我之前在处理Pentaho版本升级时也碰到过一模一样的问题,咱们来拆解下这个<c:url>标签输出被截断的情况。
首先先还原你的代码场景:
<c:url value="../STPivot" var="mdxURL"> <c:param name="pivotId" value="${param.pivotId}" /> <c:param name="pivotPart" value="mdx" /> </c:url> <% System.out.println("mdxUrl ->" + pageContext.findAttribute("mdxURL")); %>
两个版本的输出差异很明确:
- Pentaho 6.1:输出完整URL
../STPivot?pivotId=95d6c6e6-6ba1-4e07-94a9-9ea1c2721974&pivotPart=mdx - Pentaho 7.1:输出被截断为
../STPivot?pivot...
问题根源分析
Pentaho 7.x系列对JSTL标签的内部处理逻辑做了调整,尤其是针对<c:url>标签的输出,可能新增了长参数值自动截断的逻辑,或者是服务器层面对日志输出做了格式化省略,目的是简化日志内容,但却影响了实际URL的完整性。
可行的解决方案
1. 手动拼接URL,绕过<c:url>标签
既然<c:url>在7.1版本里有截断问题,直接用EL表达式手动拼接URL是最直接的解决方式,完全避开标签的内部处理:
<c:set var="mdxURL" value="../STPivot?pivotId=${param.pivotId}&pivotPart=mdx" /> <% System.out.println("mdxUrl ->" + pageContext.findAttribute("mdxURL")); %>
这种方式能确保参数完整输出,和6.1版本的行为一致。
2. 检查Pentaho 7.1的配置项
你可以排查下服务器的配置,看看是不是有相关的截断规则:
- 打开
pentaho-server/tomcat/webapps/pentaho/WEB-INF/web.xml,查找JSTL相关的配置参数,有没有新增的长度限制项 - 检查日志配置文件(比如
log4j.xml或logback.xml),确认是否对pageContext相关的输出做了截断处理
3. 用Java脚本直接生成URL
如果EL拼接还是有问题,直接在JSP里用Java代码生成并设置URL,确保参数100%完整:
<% String pivotId = request.getParameter("pivotId"); String mdxURL = "../STPivot?pivotId=" + pivotId + "&pivotPart=mdx"; pageContext.setAttribute("mdxURL", mdxURL); System.out.println("mdxUrl ->" + mdxURL); %>
验证效果
测试以上任意一种方法后,Pentaho 7.1的控制台应该能输出完整的URL,和6.1版本的输出一致。
内容的提问来源于stack exchange,提问作者José Gil Ceballo
相关产品推荐
相关产品推荐

