2017-10-20 6 views
0

私はSpring MVCでWebアプリケーションを開発しています。問題は、Webページのフォームに記入したにもかかわらず、自分のコントローラのPOSTメソッドで@ModelAttributeを使って渡したモデルが空であるようです。POST中のSpring MVCモデルが空です

これは私のコントローラのメソッドGETされています

@RequestMapping(value = "/CircleUp", method = RequestMethod.GET) 
public ModelAndView circleUpGet(Model _model) { 
    ModelAndView modelAndView = new ModelAndView("CircleUp"); 

    CircleUpModel circleUpModel = new CircleUpModel(); 
    _model.addAttribute("circleUpModel", circleUpModel); 

    return modelAndView; 
} 

をこれは私のコントローラのPOSTメソッドである:ここでは

@RequestMapping(value = "/CircleUp", method = RequestMethod.POST) 
public ModelAndView circleUpPost(HttpServletRequest _request, Model _model, @ModelAttribute("circleUpModel") CircleUpModel _circleUpModel) { 

    return this.doCircleUp(_request, _model, _circleUpModel); 
} 

"_circleUpModel" は、任意の値を持っていません。

は、これは必要なスクリプトを使用して、関連の.jspファイルの私のフォームです:

<form:form method="post" modelAttribute="circleUpModel" id="circle_form" action="" enctype="multipart/form-data" > 


    <form:input path="file" id="upload" type="file" /> 

    <form:checkbox path="mergeSameTickmarks" checked="true" /> 

    <form:checkbox path="deleteHighlights" checked="true" /> 

    <form:checkbox path="generateFigureLog" checked="true" /> 

    ... 

    <input type="button" onclick="javascript:submitForm()" 
     value="Start Circle Up"> 

function submitForm() { 
    if (checkIfPdf() && checkSettings()) { 
     $("#circle_form").submit() 
     setTimeout(progress, 100); 
    } 
} 

はもちろんCircleUpModelのデフォルト値が提示されているが、私はいくつかの他の値を入力すると、私のフォームにmodelAttribute="circleUpForm"を追加したにもかかわらず、Webページの形式では、このエントリはPOSTメソッドでは考慮されていません。

CircleUpModel:

import org.pdfclown.files.File; 


public class CircleUpModel { 

    // File 
    private File file; 

    // FileName 
    private String fileName; 

    private boolean mergeSameTickmarks; 
    private boolean deleteHighlights; 
    private boolean generateFigureLog; 

    // Settings 
    private double circleBorderWidth; 

    private double customizeCircleUp; 
    private double customizeCircleDown; 

    private double gapLeft; 
    private double gapRight; 
    private double maxGap; 

    private boolean tickmarkAlwaysUpperCase; 

    public File getFile() { 
     return file; 
    } 

    public void setFile(File file) { 
     this.file = file; 
    } 

    public String getFileName() { 
     return fileName; 
    } 

    public void setFileName(String fileName) { 
     this.fileName = fileName; 
    } 

    public boolean isMergeSameTickmarks() { 
     return mergeSameTickmarks; 
    } 

    public void setMergeSameTickmarks(boolean mergeSameTickmarks) { 
     this.mergeSameTickmarks = mergeSameTickmarks; 
    } 

    public boolean isDeleteHighlights() { 
     return deleteHighlights; 
    } 

    public void setDeleteHighlights(boolean deleteHighlights) { 
     this.deleteHighlights = deleteHighlights; 
    } 

    public boolean isGenerateFigureLog() { 
     return generateFigureLog; 
    } 

    public void setGenerateFigureLog(boolean generateFigureLog) { 
     this.generateFigureLog = generateFigureLog; 
    } 

    public double getCircleBorderWidth() { 
     return circleBorderWidth; 
    } 

    public void setCircleBorderWidth(double circleBorderWidth) { 
     this.circleBorderWidth = circleBorderWidth; 
    } 

    public double getCustomizeCircleUp() { 
     return customizeCircleUp; 
    } 

    public void setCustomizeCircleUp(double customizeCircleUp) { 
     this.customizeCircleUp = customizeCircleUp; 
    } 

    public double getCustomizeCircleDown() { 
     return customizeCircleDown; 
    } 

    public void setCustomizeCircleDown(double customizeCircleDown) { 
     this.customizeCircleDown = customizeCircleDown; 
    } 

    public boolean isTickmarkAlwaysUpperCase() { 
     return tickmarkAlwaysUpperCase; 
    } 

    public void setTickmarkAlwaysUpperCase(boolean tickmarkAlwaysUpperCase) { 
     this.tickmarkAlwaysUpperCase = tickmarkAlwaysUpperCase; 
    } 

    public double getGapLeft() { 
     return gapLeft; 
    } 

    public void setGapLeft(double gapLeft) { 
     this.gapLeft = gapLeft; 
    } 

    public double getGapRight() { 
     return gapRight; 
    } 

    public void setGapRight(double gapRight) { 
     this.gapRight = gapRight; 
    } 

    public double getMaxGap() { 
     return maxGap; 
    } 

    public void setMaxGap(double maxGap) { 
     this.maxGap = maxGap; 
    } 

} 
+0

'CircleUpModel'を表示.. –

+0

私は自分の投稿を更新しました – Jannik

答えて

0

この問題は、モデル内のファイルのタイプを変更することで解決できます。

以前はpdfclownファイルでしたが、今ではMultipartFileに変更しました。 私のPOSTメソッドでは、MultipartFileからpdfclownファイルにファイルを変換していますので、以前のように動作させることができます。

0

あなたはファイルアップロードのものを削除した場合、あなたは、モデル内のデータを見ることができます。しかし、ファイルをアップロードしたい場合は、次のようにコードを微調整する必要があります。

  1. まず、メンバー 'file'とそのセッターとゲッターメソッドをモデルから削除します。
  2. 第二に、簡単なHTMLタグを使用してJSP

    <form:input path="file" id="upload" type="file" /> 
    

に以下のタグを置き換えます。

<input name="file" type="file"/> 
  • 次のようにコントローラでのPOSTメソッドの署名を変更します。

    public ModelAndView circleUpPost(HttpServletRequest _request, @ModelAttribute("circleUpModel") CircleUpModel _circleUpModel, @RequestParam("file") MultipartFile _file) { 
        //do your processing 
    } 
    
  • ここで最後のパラメータ '_fileは' MultipartFileタイプのものであり、あなたはJSPからアップロードしたファイルが含まれています。

    1. 最後に、最も重要なステップは、マルチパートリゾルバをSpringコンフィグレーションファイルに登録することです。

      <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
          <beans:property name="maxUploadSize" value="100000" /> 
      </beans:bean> 
      

    この情報がお役に立てば幸いです。

    +0

    私の遅い応答とおかげで申し訳ありません!残念ながら、それは直接役に立ちませんが、あなたの例は間接的に私の問題を解決するのに役立ちます!私はすでに春の設定でマルチパートリゾルバを実装していましたが、これは競合につながるファイルのタイプでした。 – Jannik

    関連する問題