2017-10-20 102 views
0

我正在用Spring MVC開發WebApp。問題是我的模型,我通過@ModelAttribute,在我的控制器的POST方法中通過,似乎是空的,儘管我已經填寫了網頁上的表單。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",但在網頁的形式中,這些代碼並未在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'及其setter和getter方法。
  2. 其次,在你的JSP

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

用簡單的HTML代碼替換下面的標籤。

<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配置文件中註冊一個multipart resolver。

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

    希望這有助於。

    +0

    對不起,我遲到的答覆和感謝您的幫助!不幸的是,它並沒有直接幫助,但你的例子可以間接幫助我解決問題!我已經在我的Spring配置中實現了多重解析器,但它是導致衝突的文件類型。 – Jannik