public class PicDB {
public int id;
public TypeDB typedb;
public String oldPicName;
public String serverPicName;
public String newPicName;
//省略set/get........
}
-----------------------------------------------------------------
jsp:
    <s:form action="fileUpload" method="POST" namespace="/admin" enctype="multipart/form-data">
<s:select label="请选择分类" id="typedb.id" name="typedb.id" list="typeList" listKey="id" listValue="text"></s:select>
     <s:file name="myFile" label="请选择图片" /> 
        <s:textfield id="picdb.newPicName" name="picdb.newPicName" label="图片名称" />
        <s:submit />
    </s:form>action:
public class FileUploadAction extends ActionSupport {
//private static final long serialVersionUID = 572146812454l;
public PicDAO picDao;
public TypeDAO typeDao;
public PicDB picdb;
public TypeDB typedb;
private File myFile;
//省略set/get
public String uploadimg() {
System.out.println("uploadimg");//这句能打印出来,证明进入这个方法了
System.out.println(picdb.getNewPicName());//走到这句时出错,错误信息如下

return SUCCESS;
}
}error:
java.lang.NullPointerException
com.zjm.cctw66.upload.web.action.FileUploadAction.uploadimg(FileUploadAction.java:105)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)如果直接写<s:textfield name="newPicName",action里直接定义变量newPicName,这样就正常
但是<s:textfield name="picdb.newPicName"这样用就报错

解决方案 »

  1.   

    1>.public PicDB picdb;picdb应该有get/set方法。如果有get/set参照2>2>.最好使用请求转发到你的jsp,在对应的Action中
    picdb = new PicDB();
      

  2.   

    com.zjm.cctw66.upload.web.action.FileUploadAction.uploadimg(FileUploadAction.java:105)  System.out.println(picdb.getNewPicName());//走到这句时出错,错误信息如下
    这行是105行吧?说明你转到action之前,你的picdb对象的  newPicName是null。picdb对象的 getter 和setter 你都写了没?
      

  3.   

    说明你转到action之前,你的picdb对象的  newPicName是null。 
    这个不对吧,应该是picdb为null最好使用请求转发到你的jsp,在对应的Action中
    picdb = new PicDB(); 这个一般没必要,struts2的parameters拦截器,遇到picdb.xxx的时候会自己创建PicDB对象。
    看不出来,你看看是否有getPicdb和setPicdb方法。