今天讲的这个错误对Java的初学者,一般情况都会犯这个小错误。其实很正常对于我来说刚学完c#.net,很自然会觉得字都一定要对应。要不然肯定会报错的,在Java中并不是这样的。我们回到正题,如何解决javax.el.PropertyNotFoundException错误呢!先看错误
javax.el.PropertyNotFoundException: Property 'ProductName' not found on type com.gx.po.PW_ProductAllot
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:229)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:206)
at javax.el.BeanELResolver.property(BeanELResolver.java:317)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85)
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
at org.apache.el.parser.AstValue.getValue(AstValue.java:182)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967)
at org.apache.jsp.jsp.userType.list_jsp._jspx_meth_c_005fforEach_005f0(list_jsp.java:418)
at org.apache.jsp.jsp.userType.list_jsp._jspService(list_jsp.java:220)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
.
.
.
Jsp的代码如下:
<tbody>
<c:forEach items="${PWProductAllots}" var="PWProductAllot">
<tr>
<td>${PWProductAllot.ProductName}</td>
<td>${PWProductAllot.InterestUpperLimit}</td>
<td>${PWProductAllot.InterestBaseLine}</td>
<td>${PWProductAllot.Intereststardate}</td>
<td>${PWProductAllot.InterestClosedDate}</td>
<td>${PWProductAllot.HandleJurisdiction}</td>
<td>${PWProductAllot.HandleJurisdictionStarDate}</td>
<td>${PWProductAllot.HandleJurisdictionClosedStarDate}</td>
</tr>
</c:forEach>
</tbody>
再来看看po类的部分字段的封装如下:
private Integer ProductAllotID;
private String productName;
private BigDecimal CostInterest;
private BigDecimal InterestUpperLimit;
private BigDecimal InterestBaseLine;
private String HandleJurisdiction;
private String ProductNamee;
public Integer getProductAllotID() {
return ProductAllotID;
}
public String getProductName() {
return productName;
}
public BigDecimal getCostInterest() {
return CostInterest;
}
public BigDecimal getInterestUpperLimit() {
return InterestUpperLimit;
}
public BigDecimal getInterestBaseLine() {
return InterestBaseLine;
}
public String getHandleJurisdiction() {
return HandleJurisdiction;
}
public String getProductNamee() {
return ProductNamee;
}
public void setProductAllotID(Integer productAllotID) {
ProductAllotID = productAllotID;
}
public void setProductName(String productName) {
this.productName = productName;
}
}
在一般的情况我们都会觉得这代码写得没毛病啊!字段不是要一一对应的吗?其实在Java中并不是这样的。
解决这种问题的方法:把jsp中的字段改为小写,个人建议在封装po的时候一般都是用小写的。如果你要用大写也是可以的,不过你的jsp接收的时候一定一定要用小写。