javax.el.PropertyNotFoundException: Property [id] not found on type [java.lang.String]

本文探讨了在使用Spring MVC遍历集合时,多敲了一个空格导致的问题,以及如何通过`c:if`判断避免空列表的显示,涉及前端表格操作和HTML/CSS/JS的细节处理。

细节决定成败:
  原因:通过c:foreach遍历集合时后面多敲了个空格items="${list} 多敲空格处的位置"

 <c:forEach items="${list} " var="emp">
<%--通过if判断域对象是否为空,不为空从遍历域对象中得集合--%>
                        <c:if test="${! empty list}">
                            <c:forEach items="${list} " var="emp">
                                <tr>
                                    <td><input name="ids" value="1" type="checkbox"></td>
                                    <td>${emp.id}</td>
                                    <td>${emp.ename}</td>
                                    <td>${emp.joindate}</td>
                                    <td>${emp.salary}</td>
                                    <td>${emp.bonus}</td>
                                    <td>${emp.dept_id}</td>
                                    <th class="text-center">
                                        <button type="button" class="btn bg-olive btn-xs" onclick='location.href=""'>
                                            编辑
                                        </button>
                                        <button type="button" class="btn bg-olive btn-xs" onclick='location.href=""'>
                                            删除
                                        </button>
                                    </th>
                                </tr>
                            </c:forEach>
                        </c:if>
### JSP中解决PropertyNotFoundException问题的分析与解决方案 在JSP页面中访问`User`对象的`msg`属性时,如果出现`PropertyNotFoundException`异常[^1],这通常表明JSP引擎无法找到`User`类中名为`msg`的属性。此问题的根本原因可能涉及以下几种情况: #### 1. 属性未正确声明 如果`User`类中没有定义`msg`字段或其对应的getter和setter方法,则JSP引擎会抛出`PropertyNotFoundException`异常[^2]。根据JavaBean规范,任何需要通过表达式语言EL)或标准标签库访问的属性,都必须提供相应的getter和setter方法。 ```java public class User { private String msg; public String getMsg() { // Getter 方法 return msg; } public void setMsg(String msg) { // Setter 方法 this.msg = msg; } } ``` #### 2. 字段命名不匹配 确保`User`类中的字段名与JSP页面中引用的名称完全一致。例如,如果字段名为`message`,但在JSP中尝试访问`msg`,也会导致该异常[^3]。 #### 3. 类型不兼容 如果`msg`字段的类型与JSP页面期望的类型不匹配,也可能引发异常。例如,如果`msg`是一个`Integer`类型,而JSP试图将其作为字符串处理,可能会间接导致错误[^4]。 #### 4. 对象未正确传递到JSP 如果`User`对象未正确地从Servlet或其他控制器传递到JSP页面,或者传递过程中名称拼写错误,同样会导致找不到属性的问题[^5]。 ```java // 在Servlet中将User对象放入请求范围 User user = new User(); user.setMsg("Hello, World!"); request.setAttribute("user", user); // 确保键名与JSP中一致 RequestDispatcher dispatcher = request.getRequestDispatcher("/example.jsp"); dispatcher.forward(request, response); ``` #### 5. EL表达式语法错误 在JSP页面中使用EL表达式访问属性时,语法错误可能导致异常。例如,正确的EL表达式应为`${user.msg}`,而不是`${user.message}`(如果字段名是`msg`)[^6]。 ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Example</title> </head> <body> <p>Message: ${user.msg}</p> <!-- 正确的EL表达式 --> </body> </html> ``` ### 综合解决方案 为避免`PropertyNotFoundException`,请确保以下几点: - `User`类中存在`msg`字段及其getter和setter方法。 - JSP页面中引用的属性名称与类中的字段名称完全一致。 - `User`对象已正确地从控制器传递到JSP页面,并且键名无误。 - EL表达式的语法正确,与实际字段名称匹配。 ### 示例代码 以下是一个完整的示例,展示如何正确传递`User`对象并访问其`msg`属性: ```java // User.java public class User { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } ``` ```java // Servlet.java import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class ExampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User user = new User(); user.setMsg("Hello, World!"); request.setAttribute("user", user); // 设置属性 RequestDispatcher dispatcher = request.getRequestDispatcher("/example.jsp"); dispatcher.forward(request, response); } } ``` ```jsp <!-- example.jsp --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Example</title> </head> <body> <p>Message: ${user.msg}</p> <!-- 使用EL表达式访问属性 --> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值