更新功能无法正常工作

时间:2018-06-27 09:56:52

标签: spring rest spring-data

我是Hibernate的Spring MVC的新手。我编写了一个简单的应用程序,但是这段代码没有引起什么问题。

更新功能无法正常运行。到GET方法为止,它的工作正常,下面是相同的URL:

http://localhost:8080/TestSample/forms/updateReq/1

单击提交按钮后,POST方法不起作用。这是链接:

http://localhost:8080/TestSample/forms/updateReq/addReqNo

这是我的控制者:

package com.sample.controllers;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.objenesis.instantiator.perc.PercSerializationInstantiator;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.sample.Service.AddMoreService;
import com.sample.model.AddMoreList;
import com.sample.model.AddMoreModel;
import com.sample.model.AddNoOfReq;

@Controller
public class AddMoreFieldController {

    @Autowired
    private AddMoreService addMoreService;

    @RequestMapping(value = "/addReqNo", method = RequestMethod.GET)
    public String testPage(AddNoOfReq addNoOfReq, Model model) {
        model.addAttribute("addNoOfReq", addNoOfReq);
        model.addAttribute("reqList", addMoreService.getReq(addNoOfReq));
        return "testPage";
    }

    @RequestMapping(value = "/addReqNo", method = RequestMethod.POST)
    public String testPageProcess(@ModelAttribute AddNoOfReq addNoOfReq, Model model) {
        for (int i = 0; i <= addNoOfReq.getReqName(); i++) {
            if (addNoOfReq.getReqNo() == 0) {
                addMoreService.addReq(addNoOfReq);
            } else {
                addMoreService.updateReq(addNoOfReq);
            }
        }
        model.addAttribute("addNoOfReq", addNoOfReq);

        model.addAttribute("reqList", addMoreService.getReq(addNoOfReq));
        return "redirect:/forms/testPage";
    }

    @RequestMapping(value = "/updateReq/{reqNo}", method = RequestMethod.GET)
    public String editReq(@PathVariable("reqNo") int reqNo, Model model) {

        AddNoOfReq addNoOfReq = new AddNoOfReq();
        model.addAttribute("addNoOfReq", addMoreService.findElementById(reqNo));
        model.addAttribute("reqList", addMoreService.getReq(addNoOfReq));

        return "testPage";
    }
}

这是我的DAO:

package com.sample.Dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.sample.model.AddMoreModel;
import com.sample.model.AddNoOfReq;

@Repository
public class AddMoreDaoImpl implements AddMoreDao {

    @Autowired
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    protected Session getSession() {
        return sessionFactory.openSession();
    }

    @Override
    public void add(AddMoreModel addMoreModel) {

    }

    @Override
    public void addReq(AddNoOfReq addNoOfReq) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        if (addNoOfReq != null) {
            session.saveOrUpdate(addNoOfReq);

            tx.commit();

            session.close();
        }
    }

    @Override
    public AddNoOfReq findElementById(int rId) {
        AddNoOfReq addNoOfReq = (AddNoOfReq) getSession().get(AddNoOfReq.class, rId);
        return addNoOfReq;
    }

    @Override
    public void updateReq(AddNoOfReq addNoOfReq) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        if (addNoOfReq != null) {
            session.update(addNoOfReq);

            tx.commit();

            session.close();
        }

    }

    @Override
    public List getReq(AddNoOfReq addNoOfReq) {
        Session session = sessionFactory.openSession();
        List<AddNoOfReq> list = new ArrayList<>();
        Query query = session.createQuery("from AddNoOfReq");

        list = query.list();
        session.close();
        return list;
    }
}

1 个答案:

答案 0 :(得分:1)

这不起作用,因为您没有此路径的映射:

http://localhost:8080/TestSample/forms/updateReq/addReqNo

要执行此URL的POST方法,您需要以下功能:

@RequestMapping(value = "/updateReq/{reqNo}", method = RequestMethod.POST)
public String editReq(@PathVariable("reqNo") int reqNo, Model model) {

    AddNoOfReq addNoOfReq = new AddNoOfReq();
    model.addAttribute("addNoOfReq", addMoreService.findElementById(reqNo));
    model.addAttribute("reqList", addMoreService.getReq(addNoOfReq));

    return "testPage";
}

但是,只有方法= RequestMethod.GET才具有相同的功能。