1

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

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

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

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

NullPointerException我在表演时得到了bean.setuslno(urislno)。即使urislno正确打印为3.

ProfileBean班级:

public class ProfileBean {

  private int uslno;

  public int getUslno() {
    return uslno;
  }

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

为什么会这样?

4

1 回答 1

5

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

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

然而,更好的方法是让容器为你做这件事。您只需要在struts.xml

<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;
}
于 2013-07-05T12:30:08.453 回答