繁体   English   中英

在Spring Boot中从另一个控制器调用一个控制器

[英]Call a controller from another controller in spring boot

对于Spring Boot,我还很陌生,目前处于困境。

我有2种控制器方法

IndexController.java

@RequestMapping(value="/openxml", params = "btnTransform", method = RequestMethod.POST)
    public String transformXml(HttpServletRequest request, Model model) {
        try {
            String fileContent = request.getParameter("code1").replaceAll("&", "&");
            String fileName = request.getParameter("fileName");
            InputStream is1 = IOUtils.toInputStream(fileContent,StandardCharsets.UTF_8);
            InputStream is2 = IOUtils.toInputStream(fileContent,StandardCharsets.UTF_8);
            String htmlString=xmlOperation.simpleTransform(is1,  fileName);
            if (htmlString.equals("")){
                model.addAttribute("message", "Please validate your XML!!");
            }            
            model.addAttribute("htmlString",StringEscapeUtils.escapeHtml4(htmlString));
            model.addAttribute("fileContent", fileContent);
            model.addAttribute("fileName",fileName);
        } catch (Exception e) {
            logger.error(e.getMessage());
            System.out.println(e.getMessage());
        }
        return "greeting";
    }

    @RequestMapping(value="/updatexpath", method=RequestMethod.POST, produces = "application/json")
        @ResponseBody
        public String updateXPath(@RequestParam("xml") String xml, @RequestParam("xPath") String xPath, @RequestParam("editedText") String editedText){
            xml=xml.replaceAll("&", "&");
            InputStream is = IOUtils.toInputStream(xml, StandardCharsets.UTF_8);
            String editedXml=xmlOperation.updatePara(is, xPath, editedText);
            editedXml=editedXml.replaceAll("&", "&");
            return editedXml; 
 }

我在这里所做的是从ajax调用updateXPath方法并获取editedXml并更新文本区域。 之后,我想调用transformXml方法(不单击任何按钮)。 可能吗? 如果是,怎么办? 如果否,是否有任何解决方法??

任何帮助将不胜感激...

一种解决方案是在控制器中使用重定向。 因此,您可以从一个@RequestMapping跳到另一个。

@Controller
public class DemoController {

    @RequestMapping("/")
    public String index(){
        String xml = "simpleXML";

        return "redirect:/transformXML?xml=" + xml;
    }

    @RequestMapping("/transformXML")
    public String transformXML(@RequestParam("xml") String xml){
        System.out.println(xml);
        //add xml to your model for the textarea.
        //transform your xml
        return xml;
    }

}

点击http://localhost:8080/将创建一个String并重定向到http://localhost:8080/xml其中包括您需要的参数。

您可以确定是否足以在transformeditedXml在文本区域中显示editedXml

您有很多方法。

第一种方式。 在春季使用Async支持。 异步支持可以将Runnable添加到执行程序,以便您可以在请求中返回响应并启动任务。 这是异步指南 并将您所有的transformXml代码放入service

第二种方式。 只需使用JavaScript发送另一个请求即可。(我将使用这种方式)

就像:

1. send request of updatexpath
2. wait until server response xml
3. update dom and put your xml to textarea
4. send request of transformXml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM