帮我看看这个有什么问题ssh

java.lang.NullPointerException
com.action.ComplainAction.addComplain(ComplainAction.java:47)
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)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

package com.action;

import java.util.Map;
import com.dao.impl.ComplainDAO;
import com.model.Complain;
import com.service.IComplainService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ComplainAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = -2724671938834252612L;
private int Complainid;
private Complain complain;
private IComplainService complainService;
public IComplainService getComplainService() {
return complainService;
}
public void setComplainService(IComplainService complainService) {
this.complainService = complainService;
}
public Complain getComplain() {
return complain;
}
public void setComplain(Complain complain) {
this.complain = complain;
}
public int getComplainid() {
return Complainid;
}
public void setComplainid(int complainid) {
Complainid = complainid;
}
@SuppressWarnings("unused")
public String addComplain()throws Exception
{
@SuppressWarnings("rawtypes")
Map session=(Map) ActionContext.getContext().getSession();
Complain complain1 = new Complain();
complain1.setUserName(complain.getUserName());
complain1.setUserPhone(complain.getUserPhone());
complain1.setUserAddress(complain.getUserAddress());
complain1.setComplainContent(complain.getComplainContent());
complain1.setComplainState(complain.getComplainState());
complain1.setComplainType(complain.getComplainType());
if(complainService.addComplain(complain1)){

    return SUCCESS;
    }
    else{
        return ERROR;
        }
}
@SuppressWarnings("unchecked")
public String updateComplain()throws Exception
{
    @SuppressWarnings("rawtypes")
    Map session=(Map) ActionContext.getContext().getSession();
    Complain complain1 = (Complain)session.get("complain");
    complain1.setUserName(complain.getUserName());
    complain1.setUserPhone(complain.getUserPhone());
    complain1.setUserAddress(complain.getUserAddress());
    complain1.setComplainContent(complain.getComplainContent());
    complain1.setComplainState(complain.getComplainState());
    complain1.setComplainType(complain.getComplainType());
    complain1.setCreateTime(complain.getCreateTime());
    if(complainService.updateComplain(complain1))
    {
        session.put("complain", complain1);
        return SUCCESS;
    }
    else{
        return ERROR;
    }


}
public String deleteComplain()throws Exception
{
    complainService.deleteComplainById(Complainid);
    System.out.println("delete");
    return SUCCESS;

}

}

package com.dao.impl;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.dao.IComplainDAO;
import com.model.Complain;

public class ComplainDAO implements IComplainDAO {
private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
@Override
public boolean deleteComplainById(int id){
    // TODO Auto-generated method stub
            Session session=sessionFactory.openSession();
             Transaction ts=session.beginTransaction();
            Query query=session.createQuery("from Complain where complainid="+id);
            List Complains=query.list();
            session.delete((Complain) Complains.get(0));
            ts.commit();
            session.close();
            return true;

}

@Override
public boolean addComplain(Complain complain) {
    // TODO Auto-generated method stub
    Session session = sessionFactory.openSession();
    Transaction ts = session.beginTransaction();
    session.save(complain);
    ts.commit();
    session.close();
    return true;
    }
@Override
public boolean updateComplain(Complain complain) {
    // TODO Auto-generated method stub
    Session session = sessionFactory.openSession();
    Transaction ts = session.beginTransaction();
    session.update(complain);
    ts.commit();
    session.close();
    return true;
    }

}

package com.dao;
import java.util.List;

import com.model.Complain;
public interface IComplainDAO {
public boolean addComplain(Complain complain);
public boolean updateComplain(Complain complain);
public boolean deleteComplainById(int id);
}

package com.service;
import java.util.List;

import com.model.Complain;
public interface IComplainService {
public boolean addComplain(Complain complain);
public boolean updateComplain(Complain complain);

public boolean deleteComplainById(int id);

}

package com.service.impl;

import java.util.List;
import com.dao.IComplainDAO;
import com.model.Complain;
import com.dao.impl.ComplainDAO;
import com.service.IComplainService;
public class ComplainService implements IComplainService{
private IComplainDAO ComplainDAO;

public IComplainDAO getComplainDAO() {
    return ComplainDAO;
}

public void setComplainDAO(IComplainDAO ComplainDAO) {
    this.ComplainDAO = ComplainDAO;
}

@Override
public boolean addComplain(Complain complain) {
    // TODO Auto-generated method stub
    return ComplainDAO.addComplain(complain);
}
@Override
public boolean updateComplain(Complain complain) {
    // TODO Auto-generated method stub
    return ComplainDAO.updateComplain(complain);
}
@Override
public boolean deleteComplainById(int id) {
    // TODO Auto-generated method stub
    return ComplainDAO.deleteComplainById(id);
}

}

package com.model;

import java.sql.Timestamp;

/**

  • Complain entity. @author MyEclipse Persistence Tools */

public class Complain implements java.io.Serializable {

// Fields

private Integer complainid;
private String userName;
private String userPhone;
private String userAddress;
private String complainType;
private String complainContent;
private Integer complainState;
private Timestamp createTime;

// Constructors

/** default constructor */
public Complain() {
}

/** full constructor */
public Complain(String userName, String userPhone, String userAddress,
        String complainType, String complainContent, Integer complainState,
        Timestamp createTime) {
    this.userName = userName;
    this.userPhone = userPhone;
    this.userAddress = userAddress;
    this.complainType = complainType;
    this.complainContent = complainContent;
    this.complainState = complainState;
    this.createTime = createTime;
}

// Property accessors

public Integer getComplainid() {
    return this.complainid;
}

public void setComplainid(Integer complainid) {
    this.complainid = complainid;
}

public String getUserName() {
    return this.userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getUserPhone() {
    return this.userPhone;
}

public void setUserPhone(String userPhone) {
    this.userPhone = userPhone;
}

public String getUserAddress() {
    return this.userAddress;
}

public void setUserAddress(String userAddress) {
    this.userAddress = userAddress;
}

public String getComplainType() {
    return this.complainType;
}

public void setComplainType(String complainType) {
    this.complainType = complainType;
}

public String getComplainContent() {
    return this.complainContent;
}

public void setComplainContent(String complainContent) {
    this.complainContent = complainContent;
}

public Integer getComplainState() {
    return this.complainState;
}

public void setComplainState(Integer complainState) {
    this.complainState = complainState;
}

public Timestamp getCreateTime() {
    return this.createTime;
}

public void setCreateTime(Timestamp createTime) {
    this.createTime = createTime;
}

}

你的那个action报空指针异常了

是complainService为空,如果你使用了Spring的话,并且启用了自动装配的话。应该在那个setComplainService(IComplainService complainService上面加一个@Autowired注解,

 @Autowired
public void setComplainService(IComplainService complainService) {
    this.complainService = complainService;
}