返回错误:Http 500 
   java.lang.NullPointerException
    com.pingpingme.action.DepartmentAction.save(DepartmentAction.java:58)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
请求页面的代码是:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<div class="page">
  <div class="pageContent">
    <s:form theme="simple" method="post" action="Departmentsave" class="pageForm required-validate" onsubmit="return validateCallback(this,navTabAjaxDone)" >
      <div class="pageFormContent" layoutH="56">
        <p> <label>公司编号:</label> <s:textfield name="companycode" size="30"></s:textfield> </p>
        <p> <label>部门编号:</label> <s:textfield name="departmentcode" size="30"></s:textfield> </p>
        <p> <label>部门名称:</label> <s:textfield name="departmentname" size="30" class="required" alt="请输入部门名称"></s:textfield> </p>
        <p> <label>部门描述:</label> <s:textfield name="departmentdescription" size="30" class="requeired"></s:textfield> </p>
        <p> <label>上级部门:</label> <s:textfield size="30" name="parentdepartment"></s:textfield> </p>
        <p> <label>显示顺序:</label> <s:textfield size="30" name="indexorder" class="required"></s:textfield> </p>
        <p> <label>备注:</label> <s:textfield size="30" name="re"></s:textfield> </p>
      </div>
      <div class="formBar">
        <ul>
          <li> <div class="buttonActive"> <div class="buttonContent"> <button type="submit">保存</button> </div> </div> </li>
          <li>
            <div class="button">
              <div class="buttonContent"> <button type="reset">取消</button> </div>
            </div>
          </li>
        </ul>
      </div>
    </s:form>
  </div>
</div>
Action里的代码是:
package com.pingpingme.action;
import java.util.ArrayList;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.ServletActionContext;
import com.pingpingme.dao.DepartmentDao;
import com.pingpingme.actionform.Department;
import com.pingpingme.tools.Change;
public class DepartmentAction extends ActionSupport {
DepartmentDao departmentdao=new DepartmentDao();
private Department department;
public void setDepartment(Department department) {
this.department=department;
}
public Department getDepartment() {
return department;
}
        //添加一新的部门,成功后跳转到部门浏览页面
    public String save() throws Exception {
        this.getDepartment();
        System.out.println(department);
        System.out.println(getDepartment().getDepartmentname());
        department.setDepartmentcode(getDepartment().getDepartmentcode());
        department.setDepartmentname(getDepartment().getDepartmentname());
        department.setParentdepartment(getDepartment().getParentdepartment());
        department.setDepartmentdescription(getDepartment().getDepartmentdescription());
        department.setCompanycode(getDepartment().getCompanycode());
        department.setIndexorder(getDepartment().getIndexorder());
        department.setRe(getDepartment().getRe());
        departmentdao.insertDepartment(department);
        return SUCCESS;
    }

DepartmentDao的代码是:
package com.pingpingme.dao;
import java.sql.*;
import java.util.ArrayList;
import com.pingpingme.dao.DBConnectionManager;
import com.pingpingme.actionform.Department;
public class DepartmentDao {
private DBConnectionManager db;
private Connection con=null;
private ResultSet rs=null;
private PreparedStatement ps=null;
private String sql="";
//释放连接资源
public void freeCon() {
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
}catch (SQLException ex) {
ex.printStackTrace();
}
if(db!=null) db.freeConnection("idb", con);
}
        //添加一部门记录
    public void insertDepartment(Department department) {
        db=DBConnectionManager.getInstance();
        con=db.getConnection("idb");
        sql="insert into tb_department values('"+department.getDepartmentcode()+"','"+department.getDepartmentname()+"'"+
           "'"+department.getParentdepartment()+"','"+department.getDepartmentdescription()+"','"+department.getCompanycode()+"'"+
           "'"+department.getIndexorder()+"','"+department.getRe()+"')";
        System.out.println(sql);
        try {
            ps=con.prepareStatement(sql);
            ps.executeUpdate();
        }catch (SQLException ex) {
            ex.printStackTrace();
        }finally {
            freeCon();
        }
    }
}想尽了一切办法,可还是报空值返回错误,各位如何解决,谢谢!

解决方案 »

  1.   

    后台有一个:private Department department;
    但你页面传递的时候和后台关联不起来吧:
    <s:textfield name="companycode" size="30"></s:textfield>        
    <s:textfield name="departmentcode" size="30"></s:textfield> 
    这里的name后台能认识么???取的名字好像不对吧
           
      

  2.   

    这里name属性是department里的域数据。
      

  3.   

    这里name属性是department里的域数据???不太理解,属性还是???
      

  4.   

    你的页面属性必须是<s:textfield name="department.companycode" size="30"></s:textfield>  
    这样struts2的值拦截器会自动将页面的数据加入到当前对象对应的属性当中。