3

Spring MVC 3を使用していて、次のコントローラーがあります

@RequestMapping(value="FileUploadForm",method=RequestMethod.GET)
public String showForm(ModelMap model){
    UploadForm form = new UploadForm();
    model.addAttribute("FORM", form);
    return "FileUploadForm";
}

@RequestMapping(value="FileUploadForm",method=RequestMethod.POST)
public ModelAndView processForm(@ModelAttribute(value="FORM") UploadForm form,BindingResult result){
    if(!result.hasErrors()){
        FileOutputStream outputStream = null;
        String filePath = System.getProperty("java.io.tmpdir") + "/" + form.getFile().getOriginalFilename();
        try {
            outputStream = new FileOutputStream(new File(filePath));
            outputStream.write(form.getFile().getFileItem().get()); 
            outputStream.close();
            System.out.println(form.getName());


             return new ModelAndView(new RedirectView("success?Filepath="+filePath, true, true, false));
        } catch (Exception e) {
            System.out.println("Error while saving file");
            return new ModelAndView("FileUploadForm");
        }

    }else{
        return new ModelAndView("FileUploadForm");
    }

}

このコントローラーはファイルパスを取得し、ブラストを実行するために使用します

@RequestMapping(value="success")
public String blasta(@ModelAttribute("Filepath") String filepath, Model model){
    Blast sb = new Blast("somepath");
    String[] blastIt = sb.blast("somepath", filepath);
    String newLine = System.getProperty("line.separator");
    ArrayList<Object> result = new ArrayList<>();

    for (int i = 5; i < blastIt.length; i++) {
        if(blastIt[i].startsWith("Lambda")){
            break;
        } else {
            seila.add(blastIt[i]);
            System.out.println(blastIt[i]);
        }
        model.addAttribute("RESULT", result);

    }      
    File f1 = new File(filepath);
    f1.delete();
    return "success";

}

すべて正常に動作しますが、URLにファイルパスが含まれています。

http://localhost:8081/Ambase/success?Filepath=filePath

そして、可能であればこの方法が欲しい

http://localhost:8081/Ambase/success
4

2 に答える 2

0

この問題を回避するには、 を使用する必要がありますRedirectAttributes。filePath の値をリダイレクト ビューのパラメーターに追加し、コントローラーblastaでそれを取得できます。

これを実現するには、コントローラー関数processFormにパラメーターをもう 1 つ追加する必要があります。すべてのパラメーターの最後に追加RedirectAttributes attributesし、RedirectView ステートメントのすぐ上に次の行を追加します。

attributes.addFlashAttribute("Filepath",filePath);

そして、この属性をblastaコントローラー関数内の ModelMap で取得できます。

これがお役に立てば幸いです。乾杯。

于 2012-09-28T05:21:00.680 に答える