NullPointerExcetion本机方法访问器出错,可以给我一个解决方案

时间:2016-03-10 04:06:10

标签: spring hibernate

我浏览“http://localhost:8080/subject/form”以获取Subjectform.jsp中的填充信息,之后将“http://localhost:8080/subject/add”用于表格主题中的插入主题对象。但它不会插入主题对象和包含错误:

null<br/>
edu.java.spring.controller.SubjectController.addSubject(SubjectController.java:5
0)<br/>
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br/>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<br
/>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
a:43)<br/>
java.lang.reflect.Method.invoke(Method.java:497)<br/>
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHa
ndlerMethod.java:215)<br/>
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(I
nvocableHandlerMethod.java:132)<br/>
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMet
hod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)<br/>
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapt
er.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)<br/>
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapt
er.handleInternal(RequestMappingHandlerAdapter.java:689)<br/>
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(A
bstractHandlerMethodAdapter.java:83)<br/>
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.j
ava:938)<br/>
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.ja
va:870)<br/>
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet
.java:961)<br/>
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:86
3)<br/>
javax.servlet.http.HttpServlet.service(HttpServlet.java:707)<br/>
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:8
37)<br/>
javax.servlet.http.HttpServlet.service(HttpServlet.java:790)<br/>
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:801)<br/>
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)<br/>
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)<br
/>
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)<br/>

org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223
)<br/>
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:112
6)<br/>
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)<br/>
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
<br/>
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1060
)<br/>
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)<br
/>
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerC
ollection.java:215)<br/>
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java
:110)<br/>
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)<
br/>
org.eclipse.jetty.server.Server.handle(Server.java:509)<br/>
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:288)<br/>
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:240)<br/>

org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:539)<br/>
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
<br/>
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540)<
br/>
java.lang.Thread.run(Thread.java:745)<br/>

此处提交SubjectController.class

@Controller
public class SubjectController {
    @Autowired
    public StudentDAO studentDao;

    public SubjectDao subjectDao;
    @RequestMapping(value = "subject/form",method = RequestMethod.GET)
    public ModelAndView subjectForm (){
        ModelAndView model = new ModelAndView("SubjectForm", "subject", new Subject());
        List<Student> students = studentDao.listStudents();
        Map<Integer,String> map = new HashMap<Integer,String>();
        for(int i=0;i<students.size();i++){
            map.put(students.get(i).getId(), students.get(i).getName());
        }
        model.getModelMap().put("studentList",map);
        return model;
    }
    @RequestMapping(value="subject/add",method = RequestMethod.POST)
    public void addSubject(@Valid @ModelAttribute("subject")Subject subject){
//      ModelAndView model = new ModelAndView("redirect:/subject/list");
        subjectDao.insert(subject);
//      return model;

    }

此处提交SubjectHibernateDaoImpl.class

public class SubjectHibernateDaoImpl implements SubjectDao {
    @Autowired
    public LocalSessionFactoryBean sessionFactory;
    @Override
    public void insert(Subject subject){
        Session session = sessionFactory.getObject().openSession();
        try {
            session.save(subject);
            session.flush();

        } finally {
            // TODO: handle finally clause
            session.close();
        }
    }
    public List<Subject> listSubject() {
        // TODO Auto-generated method stub

        Session session = sessionFactory.getObject().openSession();
        Query query = session.createQuery("from Subject");
        try {

            return query.list();
        } finally {
            // TODO: handle finally clause
            session.close();
        }
    }

此处提交Subject.class

@Entity
@Table(name = "subject",uniqueConstraints={@UniqueConstraint(columnNames="id")})
public class Subject {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column(name = "title", nullable = false, length = 200)
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Column(name = "student", nullable = false)
    public int getStudent() {
        return student;
    }
    public void setStudent(int student) {
        this.student = student;
    }
    @Column(name = "score", nullable = false)
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    public int id;
    public String title;
    public int student;
    public int score;

}

此处提交Subject.jsp

<html>
<head>
<title>Add New Subject Information</title>
</head>
<body>
    <h2>Please Input Subject Information</h2>
    <form:form method="POST" modelAttribute="subject" action="add">
        <table>
            <tr>
                <td><form:label path="student">Student</form:label></td>
                 <td><form:input path="student" type = "number"/></td>


            </tr>

            <tr>
                <td><form:label path="title">Title</form:label></td>
                <td><form:input path="title"/></td>
            </tr>
            <tr>
                <td><form:label path="score">Score</form:label></td>
                <td><form:input path="score" type = "number"/></td>
             </tr>

             <tr>
                <td colspan="3"><input type="submit" value="Submit"/></td>
        </table>


    </form:form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您似乎忘了添加@Autowired注释。它出现在studentDao但不出现在subjectDao,导致该对象未被初始化。