JSTL表达式错误PropertyNotFoundException: Property 'title' not found on type java.lang.String

本文详细解析了一个常见的JSTL表达式错误——PropertyNotFoundException,并给出了正确的表达式写法。通过实例说明如何避免此类错误,确保页面正确显示。

低级错误!!!

异常:

PropertyNotFoundException: Property 'title' not found on type java.lang.String
解释:属性找不到异常:属性title找不到

查询数据库正常,出现错误原因是jstl表达式书写错误

正确写法!!!!谨记

<c:forEach items="${blogList}" var="blogList">
</c:forEach>



<think>我们正在处理一个Java EE中的异常:javax.el.PropertyNotFoundException: Property [name] not found on type [java.lang.String] 原因分析: 这个异常通常发生在使用EL表达式(Expression Language)访问一个对象的属性时,但该对象并没有这个属性。 具体来说,这里尝试访问一个String类型的对象的"name"属性,但是String类并没有一个叫做"name"的属性。 常见场景: 1. 在JSP或者Facelets页面中,我们可能会写这样的EL表达式:${someString.name},而这里的someString是一个字符串对象。 但是String类只有一些标准的方法(如length, substring等),并没有一个名为"name"的属性(即没有getName()方法或者公共字段name)。 2. 可能你期望的是一个具有name属性的对象,但实际上传递的是一个String对象。 可能的原因: 1. 在某个地方,你错误地将一个String类型的对象赋值给了一个本应该是一个自定义对象的变量。 例如,在Servlet中设置属性:request.setAttribute("user", "John Doe"); 然后在JSP中:${user.name} -> 这里"user"是一个字符串,而不是一个具有name属性的对象。 2. 你可能在EL表达式中使用了错误的变量名,或者变量名冲突导致实际取到的是一个字符串。 3. 可能你访问的是数组或集合中的元素,但该元素是字符串,而你却试图访问它的属性。 例如:${userList[0].name},而userList[0]实际上是一个字符串。 解决方法: 1. 检查设置属性的代码(如Servlet、Controller等),确保将正确类型的对象放入作用域(request, session, application等)。 2. 检查EL表达式中的变量名是否正确,确保它引用的是你期望的对象。 3. 如果这个字符串确实包含了你需要的信息,并且你只是想要这个字符串本身,那么直接使用${someString}即可,而不需要访问.name。 4. 如果你需要从字符串中获取某些信息(如长度),可以使用EL函数或者将该字符串包装在一个具有属性的对象中。 例如,如果你需要字符串的长度,可以使用: ${fn:length(someString)} 但是需要在页面中引入函数库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 5. 如果你期望的是一个自定义对象,那么请检查生成该对象的代码,确保它被正确创建和设置。 示例: 错误代码: 在Servlet中: request.setAttribute("user", "Alice"); // 这里设置了一个字符串 在JSP中:<div>${user.name}</div> // 这里会抛出异常,因为字符串没有name属性 修正: 应该设置一个具有name属性的对象: public class User { private String name; // getter and setter } User user = new User(); user.setName("Alice"); request.setAttribute("user", user); 或者,如果只是想要显示字符串,那么直接使用:${user} 根据要求,在回答最后提出3-5个相关问题,以“§§相关问题§§”开头,然后列出问题。 </think> ### 原因分析: `javax.el.PropertyNotFoundException: Property [name] not found on type [java.lang.String]` 异常表示 EL 表达式(Expression Language)尝试访问 **`java.lang.String` 类型对象的 `name` 属性,但 `String` 类不存在该属性**。常见原因包括: 1. **错误的对象类型** 期望访问一个自定义对象(如 `User.name`),但实际传入的是一个 `String` 对象(例如 `"user123"`)。 **示例错误代码**: ```java request.setAttribute("user", "Alice"); // 传入的是 String ``` ```jsp ${user.name} <!-- 试图访问 String 的 name 属性 --> ``` 2. **EL 表达式语法错误** 错误地使用属性访问符(`.`)访问字符串内容,而非直接输出字符串。 **错误示例**: `${username.name}`(`username` 是字符串,无属性)。 3. **集合/数组元素类型错误** 尝试访问集合中字符串元素的属性(如 `${userList[0].name}`,但 `userList[0]` 是 `String` 类型)。 4. **空值或未初始化对象** 变量为 `null` 时,EL 默认不报错,但若后续操作涉及属性访问(如 `${obj.name}` 中 `obj` 为 `String`)会抛出异常。 --- ### 解决方法: 1. **检查作用域变量类型** 确保传入的是自定义对象(如 `User`),而非字符串: ```java // Servlet 中正确设置对象 User user = new User("Alice"); // User 类有 getName() 方法 request.setAttribute("user", user); ``` JSP 中正确访问: ```jsp ${user.name} <!-- 调用 user.getName() --> ``` 2. **直接输出字符串** 若只需显示字符串,直接使用变量名: ```jsp ${username} <!-- 而非 ${username.name} --> ``` 3. **使用 EL 函数处理字符串** 如需字符串操作(如长度),用 JSTL 函数: ```jsp <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ${fn:length(username)} ``` 4. **调试技巧** - 输出变量类型: `${pageContext.request.getAttribute('user').getClass().name}` - 检查是否为 `null`: `${user == null ? 'null' : 'not null'}`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值