2016-11-09 6 views
0

私は春のブートにはかなり新しいですし、現在私は状況に固執しています。春の起動時に別のコントローラからコントローラを呼び出す

私は私がここでやっている何を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メソッドを(ボタンをクリックすることなく)呼び出す必要があります。出来ますか?はいの場合、どのように?いいえ、いずれかの回避策?

任意の助けが理解されるであろう...

+0

あなたがテキストエリアにXMLを配置する必要がありますか?なぜなら、応答後すぐに別のコントローラに行くなら、あなたのコントローラのリダイレクトを使って 'transformXml'に行き、' editedXml'を内部に与えることができるからです。 – Patrick

+0

はい@パトリック、私はテキストエリアでxmlが必要です –

答えて

0

一つの解決策は、あなたのコントローラにリダイレクトを使用することができます。だから、@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; 
    } 

} 

文字列を作成し、必要PARAMTER含むhttp://localhost:8080/xmlにリダイレクトされます​​を押します。

transformの後にテキストエリアにeditedXmlと表示するだけで十分ですか?

+0

私は大きなxmlを持っており、私はそれをURLに渡したくありません。また、私はこれを試して、それは動作していません。 –

0

多くの方法があります。

最初の方法。春にAsyncのサポートを使用してください。非同期サポートは、Runnableをエグゼキュータに追加することができるため、要求で応答を返してタスクを開始することができます。ここにはasync guideがあります。そして、すべてのtransformXmlコードをservice

2番目の方法に入れてください。ただ、別の要求を送信するためには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 
+0

私はこれを試しました..このアプローチの問題は、変換するリクエストを送信するときに、DOMだけが更新されソースではなく古いデータ(更新されたデータではありません)を取得することです。 –

+0

あなたのコードを読んで、私はあなたが何をしようとしているのか分かりません。このコードの元の要件は何ですか? SRP(Single Responsibility原則)についての記事を読むことをお勧めします。https://en.wikipedia.org/wiki/Single_responsibility_principle – BeeNoisy

関連する問題