ttxqq 2009-08-10 09:18
浏览 235
已采纳

struts+spring+jpa NullPointerException 竟然找不出

一个很简单的问题,我却被困住了,各位高手,看看是什么问题,检查了很多遍,但问题还是没有解决
先谢谢大家了..
------------NullPointerException description------------
root cause

java.lang.NullPointerException
com.edshop.web.action.product.BrandManagerAction.add(BrandManagerAction.java:49)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.edshop.web.filter.SetCodeFilter.doFilter(SetCodeFilter.java:22)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
-------------formbean--------------------
public class BrandForm extends BaseForm {

private String name;
private FormFile formFile;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public FormFile getFormFile() {
    return formFile;
}

public void setFormFile(FormFile formFile) {
    this.formFile = formFile;
}

}
------------entity----------------
@Entity
public class Brand implements Serializable{
/** 品牌ID(UUID) /
@Id @Column(length=36)
private String code;
/
品牌名称 /
@Column(length=40,nullable=false)
private String name;
/
是否可见 /
@Column(nullable=false)
private Boolean visible=true;
/
logo路径 **/
@Column(length=80)
private String logopath;

public Brand(){}

public Brand(String logopath, String name) {
    super();
    this.logopath = logopath;
    this.name = name;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Boolean getVisible() {
    return visible;
}

public void setVisible(Boolean visible) {
    this.visible = visible;
}

public String getLogopath() {
    return logopath;
}

public void setLogopath(String logopath) {
    this.logopath = logopath;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((code == null) ? 0 : code.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Brand other = (Brand) obj;
    if (code == null) {
        if (other.code != null)
            return false;
    } else if (!code.equals(other.code))
        return false;
    return true;
}

}
---------------action--------------

public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
BrandForm formbean = (BrandForm) form;
Brand brand = new Brand();
brand.setName(formbean.getName());
//上传文件
if (formbean.getFormFile() != null && formbean.getFormFile().getFileSize() > 0) {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd/HH");//格式化日期
//logo保存文件路径的格式如:/images/brand/yyyy/MM/dd/HH/1234566.jpg
String logopathdir = "/images/brand/" + dateformat.format(new Date());
//得到图片保存的目录的真实路径
String logorealpathdir = request.getSession().getServletContext().getRealPath(logopathdir);
File logosavedir = new File(logopathdir);

        if(!logosavedir.exists())//如果目录不存在就创建
            logosavedir.mkdirs();
        String ext = formbean.getFormFile().getFileName().substring(formbean.getFormFile().getFileName().lastIndexOf('.'));
        String imagemane = UUID.randomUUID().toString()+ext;//构建文件名称
        FileOutputStream out = new FileOutputStream(new File(logorealpathdir,imagemane));
        out.write(formbean.getFormFile().getFileData());
        out.close();
        String logopath =logopathdir+imagemane;
        brand.setLogopath(logopath);
    }
    brandService.save(brand);

}
----------------web.xml的部分配置----------------

org.springframework.web.context.ContextLoaderListener

<filter>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 写回答

1条回答

  • wxjiaaa 2009-08-10 10:52
    关注

    估计问题就处在你保存文件的路径上:
    [code="java"]
    //logo保存文件路径的格式如:/images/brand/yyyy/MM/dd/HH/1234566.jpg
    String logopathdir = "/images/brand/" + dateformat.format(new Date());
    //得到图片保存的目录的真实路径
    String logorealpathdir = request.getSession().getServletContext().getRealPath(logopathdir);
    [/code]
    在地址字符串中 关于这些特殊的转义字符的输入方式 相信不用我再提醒你了吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable