【问题标题】:Nullpointerexception while setting a bean设置 bean 时出现 Nullpointerexception
【发布时间】:2013-07-05 12:16:52
【问题描述】:

点击这样的超链接后,我有一个操作 URL

/SocialStupendous/GetProfile.action?slno=3&slno=3

在我的executeActionClass 方法中,我有以下代码

public String execute() {
  int urislno=Integer.parseInt(getServletRequest().getParameter("slno"));
  System.out.println(urislno);
  bean.setUslno(urislno);       
}

当我执行bean.setuslno(urislno) 时,我得到NullPointerException。即使urislno 正确打印为3。

ProfileBean类:

public class ProfileBean {

  private int uslno;

  public int getUslno() {
    return uslno;
  }

  public void setUslno(int uslno) {
    this.uslno = uslno;
  }
}

为什么会这样?

【问题讨论】:

  • 你为什么要直接从请求中访问参数?关于NPE,看到什么是空的,不应该很明显是什么问题吗?
  • 我想抓住那些点击过 getprofile.action 网址的用户。抓住用户的唯一方法是通过他/她的 slno。因此,我想测试我是否能够从 url 访问与用户相对应的参数
  • 不需要直接访问请求,使用av action属性。
  • 你能简单介绍一下 av 动作吗,我不知道这是 struts 的新手
  • “一个动作属性”,打错了。

标签: java struts2 nullpointerexception action javabeans


【解决方案1】:

bean 未初始化。你应该在动作中以某种方式初始化它

private ProfileBean bean = new ProfileBean(); 
//and add getter ans setter

然而,更好的方法是让容器为你做这件事。你只需要在struts.xml中创建一个bean配置

<bean class="com.yourpackagename.ProfileBean" scope="default"/>

那么你就会有

private ProfileBean bean;

@Inject
public void setProfileBean(ProfileBean bean) {
  this.bean = bean;
}

并且您不需要解析参数请求,这已经由params 拦截器完成,它是您的操作应该运行的defaultStack 的一部分。您应该在您的操作中创建属性来保存参数值。

private Integer slno;

public Integer getSlno() {
    return slno;
}

public void setSlno(Integer uslno) {
    this.slno = slno;
}

动作看起来像

public String execute() {

   if (slno != null) {
     System.out.println(slno)
     bean.setUslno(slno);
   }

   ......
   return SUCCESS;
}

【讨论】:

  • = 我是新手,请告诉我如何回答为已接受
猜你喜欢
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2016-07-20
  • 2021-08-04
  • 2015-01-11
  • 2016-02-19
相关资源
最近更新 更多