ajaxform не передает значение, если вложение недоступно

Я новичок в Java и хочу создать одно веб-приложение. Я отправляю одну форму контроллеру, используя ajaxform. Есть несколько элементов, и один из них type=file,

мой метод контроллера выглядит следующим образом

    @RequestMapping(value = { "/addReplies" }, method = {
        org.springframework.web.bind.annotation.RequestMethod.POST,
        org.springframework.web.bind.annotation.RequestMethod.GET } )
@ResponseBody
public Map<String,Object> addReplies(
        @Valid @ModelAttribute("Replies") Replies replies,
        BindingResult result, HttpServletRequest request,
        HttpServletResponse response,Locale locale,Principal principal,
        @RequestParam(value = "fileData2",required=false) CommonsMultipartFile fileData2[]) throws ServletException,
        IOException {
             //perform some opraton
        }

это все работает правильно, если в данных есть вложение, иначе это не входит в этот метод.

если я удалю @RequestParam(value = "fileData2",required=false) CommonsMultipartFile fileData2[] тогда этот параметр из метода работает хорошо, но таким образом я не могу получить вложение.

Пожалуйста, постарайтесь понять мой вопрос и как только дайте мне все возможные решения.

Этот метод работает хорошо, если я не использую ajax и отправляю форму с regul

4 ответа

Решение

Для загрузки файла обычно вам нужно использовать encType="multipart/form-data" в вашей форме. Если вы хотите использовать Ajax для загрузки файла, наряду с Simple ajax call вам нужно использовать его методы

или же

Когда вы загружаете файл, перед сериализацией ajaxForm сначала проверьте, является ли filepart нулевым или нет, если его пустое значение, отключите элемент для большей доступности и отправьте

beforeSerialize: function($form, options){
//before serializing the data have to disable element if the data is not avaliable
         $(".attachfile").filter(function(){ 
              return !this.value; }).attr("disabled", "disabled");
         },

Вы пробовали это прежде, чем отправить объект данных формы ajax?

@RequestMapping(value ="/settingsSim",method=RequestMethod.POST)
   @ResponseBody
   public Map uploadSimSettings(@RequestBody String body) {
    /*
    some controller logic 
    */
   }

Я тоже так делаю но мой код тоже работает

сделать это решение

@RequestMapping(value="/saveUserTask", method=RequestMethod.POST)
@ResponseBody
public Map<String,String> saveUserTask(
        @RequestParam( value = "title" , required = false) String title,
        @RequestParam( value = "projectid" , required = false) int projectid,
        @RequestParam( value = "mileid" , required = false,defaultValue ="-1") int mileid,
        @RequestParam( value = "responsible" , required = false) int responsible[],
        @RequestParam( value = "startDate" , required = false) Date startDate,
        @RequestParam( value = "endDate" , required = false) Date endDate,
        @RequestParam( value = "description" , required = false) String description,
        @RequestParam( value = "priority" , required = false, defaultValue="1") int priority,
        @RequestParam( value = "workHours" , required = false) int workHours,
        @RequestParam(value = "attachment" , required = false) MultipartFile myFile,
        HttpServletRequest request,Principal principal,RedirectAttributes redirectAttributes,Locale locale) throws ParseException, IOException{
    String fileAttachPath;
    if(myFile!=null)
        fileAttachPath=request.getSession().getServletContext().getRealPath("/WEB-INF/attechments/"+ new Date().getTime() + "_" + myFile.getOriginalFilename());
    else
        fileAttachPath="";
}

Я только что сделал это:

$("#myform").bind('ajax:complete', function() {
    // tasks to do  with ajax submit
});

И все работало отлично.

Смотрите эту документацию API для более подробной информации.

Другие вопросы по тегам