【问题标题】:Spring Form post does not send ModelAttribute to controllerSpring Form 帖子不会将 ModelAttribute 发送到控制器
【发布时间】:2013-12-24 03:32:04
【问题描述】:

我仍然是 Spring 和 Web 编程的初学者。

我正在尝试创建一个将 modelAttribute 发送到另一个页面但 modelAttribute 始终为 null 的小表单。

FileUploadForm.java

    public class FileUploadForm {

           CommonsMultipartFile file;   String blabla;

           // initiation of FileUploadForm.

           public FileUploadForm() {        
              // TODO Auto-generated constructor stub       
              file= null;   
           }        
           public String getBlabla() {      
             return blabla;
           }

           public void setBlabla( String blabla ) {         
               this.blabla = blabla;    
           }

          public CommonsMultipartFile getFile() {       
              return file;  
          }

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

   }

MyuploadTest.jsp

<script>    
    function addFileToEcc() {
            document.getElementById('file_upload_form').target = 'upload_target';
    };  

</script>
<div>
    <div id="titleSection" style="padding:5px;color:#303030;"class="ui-state-active, ui-widget-content ui-state-active, ui-widget-header ui-state-active"  onclick="$('#fourthSection').slideToggle();" >
        <label>detail</label>
    </div>

    <div id='AttachSection'>
        <form:form id="file_upload_form" action="NewfileUpload.do" method="post" modelAttribute="fileUploadform" enctype="multipart/form-data">
            <input type="text" id='blabla' name="blabla" value="boubou" />
            <iframe id="upload_target" name="upload_target" src=""></iframe>                        
        </form:form>
    </div>
</div>

文件上传控制器.java

@Controller     
    @SessionAttributes  
    public class FileUpload extends ServiceImpl {

        @Autowired
        Log log;        
        @Autowired 
        FileManagementService gFM;

    @RequestMapping( value = "/NewfileUpload.do", method = RequestMethod.POST ) 
    //      public ModelAndView uploadFile( @ModelAttribute FileUploadForm mainForm, HttpServletRequest pRequest ) {        
       public ModelAndView uploadFile( @ModelAttribute("fileUploadform") FileUploadForm mainForm, HttpServletRequest pRequest ) {
             log.info( "Begin File Upload." );
             FileUploadDetails fud = new FileUploadDetails();                            
             fud.setStatusCode( FileUploadDetails.STATUS_SUCCESS );

             return new ModelAndView( "fileUploaded", "fud", fud );                  
      } 
   }

我知道代码看起来不漂亮并且会抛出错误,但是我在 FileUploadController.java 文件中设置了一个断点来检查传递给它的参数中的内容,并且 mainForm 总是返回 null。

任何人都知道为什么它会为空,而我知道我的 inputtext id="blabla" 确实有文本。

感谢您的帮助

【问题讨论】:

  • 请格式化您的代码。方法参数命名错误。您有一个名为 fileUploadform 而不是 mainForm 的属性。在 JSP 或控制器中重命名它。此外,您的控制器看起来很可疑,为什么控制器会扩展 ServiceImpl。你的表单对象不应该依赖CommonsMultiPartFile,而应该依赖公共接口MultiPartFile

标签: forms spring modelattribute


【解决方案1】:

在通过 GET 加载带有表单的页面时,您是否将 Form-Object 添加到模型中?也许这样的事情可以解决问题:

@RequestMapping( value = "/MyuploadTest", method = RequestMethod.GET) 
public String myUploadTest(Model model) {        
    model.addAttribute("fileUploadform", new FileUploadForm());
    return "MyuploadTest";                  
} 

【讨论】:

  • 你说得对 Jeyp 我也确实有那个控制器,但我忘了添加我代码中的那部分。 @RequestMapping( value = "/uploadTest.do", method = RequestMethod.GET ) public String uploadScreen( Model model) { model.addAttribute("fileUploadform", new FileUploadForm()); System.out.println("uploadTest");返回“我的上传测试”; }
  • 抱歉格式化不知道如何使它看起来格式化
  • 您是否已经更改了上面@M.Deinum 提到的其他内容?如果这没有帮助,那么也试试这个:使用commandName="fileUploadform" 而不是modelAttribute="fileUploadform",它会自动设置相应的 id 和 name 值。
  • 这是我不明白的,我知道它会转到 FileUploadController 并且我的理解是那个 spring 应该知道如何在 post 上设置 modelAttribute。但由于原因 FileUploadController 中的参数 mainForm 中有空数据
  • 是因为映射到了表单id或者name的名字(我不知道atm)。无论如何,您在 jsp 中将 id 指定为“file_upload_form”,并且没有专门指定名称,因此在控制器中没有任何内容与 @ModelAttribute("fileUploadform") 匹配。您应该使用 commandName="fileUploadform" 并将 id/name/modelAttribute 值留空
【解决方案2】:

最可能的原因是您没有包含 form:input 而是使用了 input,如果您有 form,这将不起作用:form 标签。您也忘记了 path="modelAttributeName"。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2012-09-09
    • 2022-11-05
    • 2015-02-13
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多