org.hibernate.PropertyNotFoundException: Could not

get方法出错

class Expenses 

private Club clubs;

改成

private Club club;

public Club getClub() {
  return club;
 }

 public void setClub(Club club) {
  this.club = club;
 }

 

org.hibernate.PropertyNotFoundException: Could not find a getter for club in class com.club.domain.Expenses

大概意思是在Expenses类中没能找到  club  属性的  get  方法

 

<!--

class Club

private Set<Expenses> expenseses = new HashSet();

public Set<Expenses> getExpenseses() {
  return expenses;
 }

 public void setExpenseses(Set<Expenses> expenseses) {
  this.expenses = expenseses;
 }

Club.hbm.xml

<set name="expenseses" inverse="true">
            <key column="club_id"></key>
            <one-to-many class="com.club.domain.Expenses" />
   </set>

 标红字的是当时手误,只要保持前后一致就行了。

-->

 

转载于:https://my.oschina.net/fuluS/blog/307106

HTTP Status 500 - javax.el.PropertyNotFoundException: Property 'no' not found on type java.lang.String type Exception report message javax.el.PropertyNotFoundException: Property 'no' not found on type java.lang.String description The server encountered an internal error that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'no' not found on type java.lang.String org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:560) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:304) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286) com.gentlesoft.framework.PltDispatcherServlet.render(PltDispatcherServlet.java:117) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) com.gentlesoft.framework.PltDispatcherServlet.doService(PltDispatcherServlet.java:40) com.gentlesoft.framework.DispatcherServletSta.doService(DispatcherServletSta.java:65) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
最新发布
04-03
<think>嗯,用户遇到了HTTP 500错误,具体是javax.el.PropertyNotFoundException,提示在java.lang.String类型上找不到属性'no'。这个问题看起来和EL表达式有关。首先,我需要回忆一下EL表达式的工作原理。在JSP或者类似的视图技术中,当使用类似${obj.property}的表达式时,EL会尝试调用obj的getProperty方法。如果obj是一个String类型,那么它自然不会有getNo()这样的方法,所以会抛出这个异常。 接下来,我应该检查用户代码中哪里使用了${...}表达式,特别是涉及'no'属性的地方。比如,可能在JSP页面中有类似${stringObj.no}的写法,而这里的stringObj实际上是一个String对象,而不是一个拥有no属性的JavaBean。这时候EL尝试访问String的no属性,当然会失败。 另外,可能用户误将某个变量当作对象使用,而实际上它是一个字符串。比如,从后台传过来的一个字符串变量,然后在页面上试图访问它的no属性,这显然是不正确的。需要检查控制器层是否正确地传递了对象,或者是否在JSP中错误地引用了变量。 还有可能是在使用JSTL标签或者某些框架标签时,错误地指定了属性。比如,在<c:forEach>中遍历一个字符串列表,却试图访问每个项的no属性,这同样会导致错误。 解决方案方面,首先需要定位到具体的JSP页面和出错的代码行。然后确认该表达式中的变量类型是否正确。如果变量应该是某个自定义对象,那么需要确保后台确实传递了该对象,并且没有在某个环节被错误地转换为字符串。如果变量本来就是字符串,那么访问它的属性就是错误的,应该直接使用该字符串的值,或者检查是否需要传递一个对象而不是字符串。 可能还需要检查是否有拼写错误,比如属性名应该是'id'或者'number',而误写成了'no'。或者,在EL表达式中使用了错误的变量名,导致取到了意外的对象。 总结来说,这个问题的根源在于EL表达式试图访问一个不存在于String类型上的属性,需要检查代码中的变量类型和属性名的正确性,确保操作的对象确实拥有相应的属性。</think>以下是关于该错误的详细分析及解决方案: ### 错误分析 出现`javax.el.PropertyNotFoundException: Property 'no' not found on type java.lang.String`的根本原因是:**在JSP/Thymeleaf等视图层中,尝试通过EL表达式访问`String`类型对象的`no`属性,但`String`类本身并没有该属性**。 ### 错误触发场景 假设你的JSP中有如下代码: ```jsp <!-- 错误示例 --> ${user.name.no} <!-- user.name是String类型,但试图访问其no属性 --> ``` 或 ```jsp <!-- 错误示例 --> ${someString.no} <!-- someString本身是String类型 --> ``` ### 逐步排查步骤 1. **定位错误代码行** - 查看异常堆栈中提到的JSP文件路径(如`xxx.jsp line: 25`),找到具体触发错误的EL表达式位置。 2. **检查变量类型** - 确认EL表达式中的变量类型: - 例如:`${obj.no}`中的`obj`是否为自定义对象? - 若`obj`应为`User`对象,但实际传递的是`String`,则会导致问题。 3. **常见错误原因** - **场景1:级联属性访问错误** ```jsp ${user.name.no} ``` - 若`user.getName()`返回`String`,则`user.name.no`等价于`String.no`,触发异常。 - **场景2:直接访问字符串属性** ```jsp ${someString.no} <!-- someString = "test"; --> ``` - **场景3:集合遍历错误** ```jsp <c:forEach items="${stringList}" var="item"> ${item.no} <!-- item是String类型 --> </c:forEach> ``` 4. **解决方案** - **方案1:检查对象属性路径** - 确保级联属性访问的每一层都是对象: ```jsp <!-- 正确示例:假设user.name是一个对象 --> ${user.name.no} <!-- 需确保name是包含no属性的对象 --> ``` - **方案2:直接使用字符串值** ```jsp <!-- 正确示例:直接输出字符串 --> ${someString} <!-- 无需访问属性 --> ``` - **方案3:检查后端数据传递** - 确认Controller层传递的数据类型: ```java // Spring MVC示例 @GetMapping("/demo") public String demo(Model model) { // 错误示例:传递String而非对象 model.addAttribute("user", "张三"); // 正确示例:传递包含no属性的对象 User user = new User("张三", 1001); model.addAttribute("user", user); return "demo"; } ``` ### 补充说明 - **EL表达式规则**:表达式如`${obj.prop}`会调用`obj.getProp()`,若`obj`是`String`,则只能访问`length`、`isEmpty()`等内置属性。 - **调试建议**:在JSP中临时输出变量类型: ```jsp <!-- 调试代码 --> ${obj.getClass().name} <!-- 查看obj的实际类型 --> ``` 通过以上步骤,可精准定位并修复该异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值