You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSP命名查询从数据库获取客户信息时出现NullPointerException

解决获取客户信息时的NullPointerException问题

看起来你在从数据库拉取客户信息填充下拉框时碰到了NullPointerException,我帮你从代码里找出几个关键问题,一个个来解决:

1. EJB注入变量名拼写错误

你在Facade类里把customerEAO拼成了cusomterEAO(少了一个字母t),这会导致容器无法正确注入EJB实例,cusomterEAO变量会是null,当你调用cusomterEAO.getAllCustomers()时自然就抛出NullPointerException了。

修正后的Facade类代码:

package examples.facade.ics; 

import java.util.ArrayList; 
import javax.ejb.Stateless;
import javax.ejb.EJB;

@Stateless 
public class Facade implements FacadeLocal{ 
    @EJB 
    private CustomerEAOLocal customerEAO; // 修正拼写错误

    public Facade() {
        // 构造方法仅做初始化操作,不要嵌套其他方法
    }

    public ArrayList<Customer> getAllCustomers(){ 
        return customerEAO.getAllCustomers(); 
    }
}

2. Facade类代码结构语法错误

你原来的代码里把getAllCustomers方法写在了构造方法内部,这是明显的语法错误,会导致类无法正确编译,间接引发运行时异常。必须把方法定义在类的作用域下,而不是构造方法的代码块里。

3. JSP页面EL表达式错误

在Index.jsp的<c:forEach>标签中,你写的是items="$customers",正确的EL表达式格式应该是items="${customers}",缺少大括号会导致JSP无法识别这个变量,既遍历不到客户数据,还可能引发其他异常。

修正后的JSP代码片段:

<h5>Customer</h5> 
<div class="section_customer"> 
    <select id="customer" onchange="change_customer(this.value)" class="frm-field required"> 
        <c:forEach var="cust" items="${customers}"> 
            <option value="${cust.custid}">${cust.name}</option> <!-- 这里建议显示客户名称更友好,也可以保留custid -->
        </c:forEach> 
        <option value="null">Kaj</option> 
    </select> 
</div>

额外需要检查的点

  • 确认CustomerEAOLocal接口的实现类已经正确标注了@Stateless或@LocalBean,确保容器能够创建并注入这个EJB实例。
  • 确认在BookingServlet中已经正确调用Facade的getAllCustomers方法,并将结果存入request属性中,示例代码如下:
// 正确获取Facade实例,比如通过@EJB注入或JNDI查找
FacadeLocal facade = ...;
ArrayList<Customer> customers = facade.getAllCustomers();
request.setAttribute("customers", customers);
// 转发到index.jsp
request.getRequestDispatcher("/index.jsp").forward(request, response);

内容的提问来源于stack exchange,提问作者Lukas Lyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:59:49