javax.el.PropertyNotFoundException : No public static field named [ShoppingBag] was found on class [Others. 客户]

标签 java jsp

我有一个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 应命名为 shoppingBagWishList 应命名为 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/

相关文章:

java - 如何在 Java 中使用 LayerManager

java - RxJava 在网络关闭时取消订阅

java - 无法在/WEB-INF/urlrewrite.xml 找到 urlrewrite conf 文件

java - 如何在jsp中通过方法 `get()`访问对象?

java - 如何加载大的小程序

javascript - 从某些 JS 打开 Windows 资源管理器时如何设置默认驱动器/文件夹

java 1.8 : String#format eating characters when called without format params

java.sql.SQL语法错误异常 : Unknown column in 'field list'

java - 如何更新二维数组中的个别行? ( java )

java - 在 OGNL Struts 2 中调用单例方法