我是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;
}
}
答案 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才具有相同的功能。