Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spring mvc+中使用文件提交表单;独自创立_Spring_Twitter Bootstrap_Spring Mvc_File Upload_Springmvc - Fatal编程技术网

在Spring mvc+中使用文件提交表单;独自创立

在Spring mvc+中使用文件提交表单;独自创立,spring,twitter-bootstrap,spring-mvc,file-upload,springmvc,Spring,Twitter Bootstrap,Spring Mvc,File Upload,Springmvc,这是一个由两部分组成的问题。 我正在尝试提交一个带有文件和文本区域的弹出表单。我无法接收控制器代码中的文件 第1部分-如何在控制器上接收文件 第2部分-提交表单后,如何关闭弹出窗口并保持在同一页面上,以便URL不会更改 弹出代码- <form name="eperform"> <div class="modal fade" id="export" tabindex="-1" role="dialog" aria-hidden="true"> <

这是一个由两部分组成的问题。 我正在尝试提交一个带有文件和文本区域的弹出表单。我无法接收控制器代码中的文件

第1部分-如何在控制器上接收文件

第2部分-提交表单后,如何关闭弹出窗口并保持在同一页面上,以便URL不会更改

弹出代码-

<form name="eperform">
    <div class="modal fade" id="export" tabindex="-1" role="dialog" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                        <span class="glyphicon glyphicon-remove" aria-hidden="true" style="padding-top: 10px;"></span>
                    </button>
                    <h4 class="modal-title custom_align" id="Heading">Provide ID's here:</h4>
                </div>
                <div class="form-group">
                    <div>
                        <fieldset style="margin-left: 10px;">
                            <legend style="font-size: medium;">File Upload</legend>                         
                            <input id="fileUpload" name="fileUpload" type="file" style="margin-left: 20px"/>
                        </fieldset>
                    </div>
                    <br/>
                    <div>
                        <fieldset style="margin-left: 10px;">
                            <legend style="font-size: medium;">Ids</legend>
                            <label for="envIds"></label> 
                            <textarea class="form-control noresize" rows="4" style="width:98% " name="ids" id="ids" value="">
                            </textarea>
                            <input type="hidden" id="server" name="server" value="${server}">
                            <input type="hidden" id="port" name="port" value="${port}"> 
                            <input type="hidden" id="queuename1" name='queuename1' value="">
                            <input type="hidden" id="environment" name="environment" value="${environment}">
                        </fieldset>
                    </div>
                </div>
                <div class="modal-footer ">
                    <button type="button" class="btn btn-success" id="eid"
                        onclick="exportObjects(document.getElementById('ids').value,document.getElementById('queuename1').value,'${port}','${server}','${environment}',document.getElementById('fileUpload').value)">
                        <span class="glyphicon glyphicon-ok-sign"></span>Export
                    </button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">
                        <span class="glyphicon glyphicon-remove"></span> Cancel
                    </button>
                </div>
            </div>
        </div>
    </div>
</form>
控制器代码-

@RequestMapping(value="/exportObjects", method = RequestMethod.GET)
public ModelAndView exportObjects(HttpServletRequest request) throws Exception{
    String server =request.getParameter("server");
    String port =request.getParameter("port");
    String environment = request.getParameter("environment");
    String type =request.getParameter("queueName");
    String ids = request.getParameter("ids");
    CommonsMultipartFile file = (CommonsMultipartFile) request.getAttribute("fileUpload");

    if(file != null && file.getSize() != 0){
        String path=request.getServletContext().getRealPath("/");
        String filename=file.getOriginalFilename();
        System.out.println(path+" "+filename);  
        try{  
            InputStream in = file.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder out = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                out.append(line);
            }
            System.out.println(out.toString());

        }catch(Exception e){System.out.println(e);} 
    }

    // Perform action on ids and file data

    ModelAndView model = new ModelAndView();
    // I do not know what to do here.
    return model;
}

您似乎不熟悉web开发,我建议您花点时间复习一下java web开发知识

以下是两个问题的答案:

  • 如果要将文件上载到服务器,必须将enctype=“multipart/form data”添加到表单中

    
    文件上传
    
    • 如果要保持在同一页面上,应使用异步方法提交操作,是最佳选择。您需要提交请求,并在成功回调方法中关闭弹出对话框

    在代码中,不应使用ModelAndView,因为它将转发到新页面,您需要返回原始字符串,如下面列出的代码,然后您可以使用获取上载文件:

    @RequestMapping(value=“epperform”,method=RequestMethod.POST)
    @应答器
    公共字符串updateNodeRelation(@RequestParam(value=“fileUpload”)
    多部分文件(HttpServletRequest){
    System.out.println(file.getOriginalFilename());
    返回“成功”;
    }
    
    已更新

  • 如果要提交文件并停留在同一页面上,则需要使用iframe而不是使用Ajax,如下所示:

    
    文件上传
    提交
    
    并使用下面的Javascript代码提交表单并关闭弹出对话框**

    函数提交文件(){
    $(“#eperform”).submit();
    $(“#dialog_div”).dialog(“close”);
    }
    

要增加收到答案的机会,只发布代码的相关部分。您似乎试图一次解决所有问题,而不仅仅是找出如何获取要上载的文件。如果我将value=“eperform”写入,并且如果我将其作为“exportObjects”写入,则请求永远不会转到方法,然后它会出错。@RahulGodara我刚刚更新了答案,您可以检查我更新的解决方案
@RequestMapping(value="/exportObjects", method = RequestMethod.GET)
public ModelAndView exportObjects(HttpServletRequest request) throws Exception{
    String server =request.getParameter("server");
    String port =request.getParameter("port");
    String environment = request.getParameter("environment");
    String type =request.getParameter("queueName");
    String ids = request.getParameter("ids");
    CommonsMultipartFile file = (CommonsMultipartFile) request.getAttribute("fileUpload");

    if(file != null && file.getSize() != 0){
        String path=request.getServletContext().getRealPath("/");
        String filename=file.getOriginalFilename();
        System.out.println(path+" "+filename);  
        try{  
            InputStream in = file.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder out = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                out.append(line);
            }
            System.out.println(out.toString());

        }catch(Exception e){System.out.println(e);} 
    }

    // Perform action on ids and file data

    ModelAndView model = new ModelAndView();
    // I do not know what to do here.
    return model;
}
$.ajax({
    url:"exportObjects",
    type:"post",
    data:{
       queueName:queueName,
       port:port,
       server:server,
       environment:environment
    },
    success:function(data){
        //if the request submit success,invoke 'close' method to close the dialog
       $("#dialog_div").dialog("close");
    }
});