我有一个jsp,我可以从中访问一个名为Customer 的java bean 的名为shoppingbag 的属性。但不幸的是,每当我运行 jsp 时,我都会遇到此异常
org.apache.jasper.JasperException: org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: No public static field named [ShoppingBag] was found on class [Others.Customer]
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
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)
javax.el.PropertyNotFoundException: No public static field named [ShoppingBag] was found on class [Others.Customer]
javax.el.StaticFieldELResolver.getValue(StaticFieldELResolver.java:61)
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:936)
org.apache.jsp.Header_jsp._jspx_meth_c_005fif_005f0(Header_jsp.java:249)
org.apache.jsp.Header_jsp._jspService(Header_jsp.java:167)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
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.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934)
org.apache.jsp.MainPage_jsp._jspService(MainPage_jsp.java:107)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
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)
这是我的 JSP
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" >WOMEN <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="AbdulTayyebs?ID=201">Tops </a></li>
<li><a href="AbdulTayyebs?ID=202">Shirts </a></li>
<li><a href="AbdulTayyebs?ID=203">Trousers & Jeans </a></li>
<li><a href="AbdulTayyebs?ID=204">Inner Wears </a></li>
<li><a href="AbdulTayyebs?ID=205">Leggings</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" >KIDS<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
</ul>
</li>
<li role ="presentation" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" ><span class="glyphicon glyphicon-shopping-cart" ></span></a>
<ul class="dropdown-menu" role="menu">
<c:if test="${Customer!=null}">
<li><a href="Billing.jsp">Shopping Cart <span class="badge">
***${Customer.ShoppingBag.Size}***
</span> </a></li>
</c:if>
<c:if test="${Customer==null}">
<li><a href="Billing.jsp">Shopping Cart <span class="badge">${0}</span> </a></li>
</c:if>
</ul>
</li>
</ul>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left" role="search" action="AbdulTayyebs?">
<div class="form-group">
<input type="text" class="form-control" width="200" placeholder="Search" name="Search">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Contact Us </a></li>
<c:if test="${Logged == false or Logged==null}">
<li><a href="Signup.jsp"><span class="glyphicon glyphicon-log-in"></span> Login</a></li></c:if>
<c:if test="${Logged!=null}">
<c:if test="${Logged==true}">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" >${Customer.getFirstname()}<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="Profile.jsp"> View Profile </a></li>
<li><a href="AbdulTayyebs?ViewAddress=true"> Add/Remove Address </a></li>
<li><a href="ChangePassword.jsp"> Update Password </a></li>
<li><a href="AbdulTayyebs?GetOrders=true"> My Orders </a></li>
</ul>
</li>
<li><a href="AbdulTayyebs?Action=Logout"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>
</c:if>
</c:if>
</ul>
</div>
</nav>
这是我的类(class)客户
public class Customer extends User implements java.io.Serializable{
private String password;
private ArrayList <PurchaseableItem> ShoppingBag;
private ArrayList <String> WishList;;
public Customer() {
super();
ShoppingBag=null;
WishList=null;
}
public String getPassword() { return password; }
public ArrayList<String> getWishList() { return WishList; }
public void setWishList(ArrayList<String> WishList) { this.WishList = WishList; }
public void setPassword(String password) { this.password = password; }
public ArrayList<PurchaseableItem> getShoppingBag(){ return this.ShoppingBag; }
public void setShoppingBag(ArrayList<PurchaseableItem> ShoppingBag) { this.ShoppingBag = ShoppingBag; }
public void AddToShoppingBag(ArrayList<PurchaseableItem> ShoppingBag){
if(ShoppingBag!=null){
if(this.ShoppingBag==null){
this.ShoppingBag = new ArrayList<>();
}
for(PurchaseableItem prc:ShoppingBag)
this.ShoppingBag.add(prc);
}
}
public int TotalItems(){
return ShoppingBag.size();
}
}
我无法理解为什么会发生这个错误。如果有人可以帮助我,我将非常感激
最佳答案
不尊重 Java 命名约定,你就是搬起石头砸自己的脚。它们非常简单:
- 包以小写形式命名。因此包
Others
应命名为others
。 - 变量(包括字段)采用驼峰式命名。因此,
ShoppingBag
应命名为shoppingBag
,WishList
应命名为wishList
。 - 方法采用驼峰命名法。因此
AddToShoppingBag()
应命名为addToShoppingBag()
。 - 当您有一个名为
getShoppingBag()
的 getter 时,相应的 bean 属性名为shoppingBag
,而不是ShoppingBag
。 JSP EL 用于访问bean 属性。因此,要从 JSP EL 调用customer.getShoppingBag()
,请使用${customer.shoppingBag}
,而不是${customer.ShoppingBag}
。 - 页面、请求、 session 和应用程序属性的命名方式类似于局部变量,采用驼峰命名法。因此,您永远不应使用
${Customer}
,而应始终使用${customer}
。
尊重这些 Java 约定,一切都会变得更好,你的代码将保持一致,你的同事也不会想杀了你。
关于javax.el.PropertyNotFoundException : No public static field named [ShoppingBag] was found on class [Others. 客户],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32796395/