我是Spring MVC的新手,在另一个控制器方法终止执行后,我在尝试重定向到控制器方法时遇到了一些问题。
所以我有以下情况。进入控制器类我有这个方法正确处理对 validaProgetti 资源的POST请求:
@RequestMapping(value = "validaProgetti", method=RequestMethod.POST)
public @ResponseBody String validaProgetti(@RequestBody List<Integer> checkedRowList) {
System.out.println("ID progetti da aggiornare: " + checkedRowList);
List<Twp1007Progetto> progettiDaValidare = new ArrayList<Twp1007Progetto>();
for (int i=0; i<checkedRowList.size(); i++) {
System.out.println("ID PROGETTO: " + checkedRowList.get(i));
progettiDaValidare.add(progettoService.getProgetto(checkedRowList.get(i)));
}
progettoService.validaProgetti(progettiDaValidare);
return "redirect:ricercaValidazione";
}
因此,此方法已正确映射,并且当 validaProgetti 资源被调用时,它将被执行。
在此方法结束时,我不返回呈现JSP页面的视图名称,但我必须重定向到另一个方法(执行某些操作并呈现JSP页面)。因此,为了返回视图名称,我重定向到另一个资源:
return "redirect:ricercaValidazione";
然后在同一个控制器类中,我声明了这个处理对此 ricercaValidazione 资源的请求的方法:
@RequestMapping(value = "ricercaValidazione", method=RequestMethod.POST)
public String ricercaValidazione(@ModelAttribute ConsultazioneFilter consultazioneFilter, Model model, HttpServletRequest request) {
RicercaConsultazioneViewObject filtro = null;
try {
filtro = new ObjectMapper().readValue(request.getParameter("filtro"), RicercaConsultazioneViewObject.class);
filtro.setSelStatoProgetto(3); // Progetti da validare
} catch (IOException e) {
logger.error(e);
}
consultazioneFilter = new ConsultazioneFilter(filtro);
model.addAttribute("consultazioneFilter", consultazioneFilter);
model.addAttribute("listaProgetti", new ListViewObject<Twp1007Progetto>(progettoService.getListaProgettiConsultazione(consultazioneFilter)) );
return "validazione/tabellaRisultati";
}
问题是它无法工作,并且在重定向后无法进入 ricercaValidazione()方法。
我认为问题可能是 ricercaValidazione()方法处理 ricercaValidazione 资源的 POST 请求以及返回“redirect:ricercaValidazione”; 可能会生成 GET 请求。
但我不确定。
为什么呢?我错过了什么?我该如何解决这个问题?
Tnx
答案 0 :(得分:2)
重定向和转发前缀用于解析视图;你想从一个控制器重定向到另一个控制器。这可以完成,但重定向按以下方式工作
从你写的东西来看,我不确定这是你真正想要的东西;正如您已经注意到的那样,HTTP方法(GET与POST)之间存在不匹配。
你的第二种方法 ricercaValidazione 期望一个filtro param来过滤一些数据,但是在 validaProgetti 中没有类似的东西,所以似乎两个控制器都不是可直接连锁。如果你想要的是显示一个显示表格的 validaProgetti 之后的页面,并且用户可以提交它,你必须添加一个用方法GET和url ricercaValidazione 注释的方法;新方法必须返回包含表单的视图;通过POST指向 validaProgetti 的网址。通过这种方式,您可以从 ricercaValidazione 重定向到 validaProgetti
答案 1 :(得分:0)
使用
等重定向指定控制器的映射名称TypeError: github.getUser is not a function
at Scope.$scope.search (script.js:39)
看看这个问题
Unable to redirect from one controller to another controller-Spring MVC