2.EL入门:param,paramValues

本文介绍了一种使用EL表达式处理HTTP请求参数的方法。通过示例代码展示了如何利用${param}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@page import="com.ankangqiao.test.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试EL表达式</title>
	</head>
	
	<body>
		
		<%
			// http://localhost:8080/JSTLTest?interesting=football&interesting=basketball
			String[] interestings = request.getParameterValues("interesting");
			for(String interesting : interestings) {
				response.getWriter().println(interesting + "<br/>");
			}
		%>
		
		<c:forEach items="${paramValues.interesting }" var="interesting">
			${interesting }<br/>
		</c:forEach>
		
		<%--
			EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}.
			 ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组值
		 --%>
		
	</body>
</html>                   

### 错误分析 `org.apache.el.parser.ParseException` 是 Java Expression Language (EL) 中常见的解析错误,通常发生在 JSP 或 JSF 页面中表达式的语法不正确时。该错误表明 EL 表达式在解析过程中遇到了意外的字符或结构。 根据提供的引用内容以及常见原因: - **引用[1]** 提到 `Encountered "<STRING_LITERAL>"` 的问题,这通常是由于字符串字面量未被正确处理引起的。 - **引用[2]** 显示了一个类似的错误,可能是因为过滤器中的编码设置不当导致了输入数据无法正常解析。 - **引用[3]** 列出了一个具体的场景,在此场景下,`schedule.name.length()` 和其他逻辑运算符(如 `gt`, `le`)可能导致解析失败。 --- ### 原因总结 此类错误的主要成因可以归纳为以下几点: 1. **EL 表达式语法错误**:例如括号匹配、操作符拼写等问题[^1]。 2. **特殊字符未转义**:如果 EL 表达式中包含了未经转义的特殊字符(如双引号 `" "`),可能会引发解析异常[^2]。 3. **Spring 过滤器配置问题**:某些情况下,`CharacterEncodingFilter` 配置不当会干扰请求参数的解析过程[^2]。 4. **JSF 组件属性冲突**:当组件属性值涉及复杂表达式时,容易因为优先级或嵌套关系而导致解析失败[^3]。 --- ### 解决方案 #### 1. 检查并修正 EL 表达式语法 确保所有的 EL 表达式都遵循正确的语法规则。以下是几个需要注意的地方: - 使用大括号 `{}` 正确包裹变量名和方法调用。 - 对于字符串常量,务必使用单引号 `' '` 而非双引号 `" "` 来表示[^1]。 示例修复前后的对比: ```jsp <!-- 错误 --> <h:outputText value="#{schedule.name.substring("0", "10")}" /> <!-- 修复 --> <h:outputText value="#{schedule.name.substring(0, 10)}" /> ``` #### 2. 处理特殊字符 对于需要传递给 EL 表达式的动态值,应提前对其进行适当转义。例如,避免直接将含有非法字符的内容注入到页面中。 可以通过预处理函数来清理潜在的风险项: ```java public String escapeForEl(String input) { if (input == null || input.isEmpty()) return ""; return input.replace("\"", "\\\""); } ``` 随后将其应用至前端绑定的数据源上。 #### 3. 验证 Spring 编码过滤器 确认项目中是否存在 `CharacterEncodingFilter` 并已正确定位。如果没有,则需手动添加;如果有但仍然出现问题,请调整其初始化顺序以确保 UTF-8 字符集始终生效[^2]。 配置样例: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` #### 4. 审核 JSF 组件定义 针对复杂的 JSF 表格或其他交互控件,逐一排查其中使用的条件判断逻辑是否合理。特别注意复合表达式内的空格分布及关键字大小写一致性[^3]。 优化建议如下: ```jsp <p:dataTable id="dataTable" value="#{scheduleBean.scheduleList}" var="schedule"> <p:column headerText="任务名称"> <h:outputText value="#{schedule.name.substring(0, Math.min(schedule.name.length(), 10))}..." rendered="#{schedule.name.length() > 10}" /> <h:outputText value="#{schedule.name}" rendered="#{schedule.name.length() <= 10}" /> </p:column> </p:dataTable> ``` 此处引入了标准库函数 `Math.min` 辅助截取字符串长度,从而减少冗余代码的同时提升可读性和稳定性。 --- ### 总结 通过以上措施能够有效缓解甚至彻底消除由 `org.apache.el.parser.ParseException` 引发的一系列问题。实际开发环境中还需结合具体业务需求灵活运用这些技巧,并保持良好的单元测试覆盖率以便及时发现隐藏缺陷。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值