点击超级链接后,我有一个操作URL
/SocialStupendous/GetProfile.action?slno=3&slno=3
在我的ActionClass的execute方法中,我有以下代码
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;
}
}
为什么会这样?
解决方法:
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;
}