Загрузка файлов портлетов EXTJS и Spring MVC - PullRequest
0 голосов
/ 27 октября 2011

Я успешно смог загрузить файл в мой метод ActionResponse в моем контроллере для моего весеннего портлета, используя extjs. Моя проблема в том, что extjs ожидает ответа json, чтобы узнать, что загрузка завершена, и ответ на мой запрос действия выводит весь портал.

Мне нужен способ, чтобы ответ на мой запрос был только строкой json.

вот мой контроллер.

@Controller

@ RequestMapping (value = "VIEW") открытый класс MediaRoomViewController {

private static final Logger _log = Logger.getLogger(MediaRoomViewController.class);

@RenderMapping
public String renderView(RenderRequest request, RenderResponse response, Model model){
    return "view";
}

@InitBinder
protected void initBinder(PortletRequest request, PortletRequestDataBinder binder) throws Exception {
    // to actually be able to convert Multipart instance to byte[]
    // we have to register a custom editor
    binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
    // now Spring knows how to handle multipart object and convert
}

@ActionMapping(params="action=uploadFile")
public String uploadFile(FileUploadBean uploadItem, BindingResult result,ActionResponse response) throws Exception {
    _log.debug("Upload File Action");

    ExtJSFormResult extjsFormResult = new ExtJSFormResult();
    try{
        if (result.hasErrors()){
            for(ObjectError error : result.getAllErrors()){
                System.err.println("Error: " + error.getCode() +  " - " + error.getDefaultMessage());
            }

            //set extjs return - error
            extjsFormResult.setSuccess(false);
        }

        // Some type of file processing...
        System.err.println("-------------------------------------------");
        System.err.println("Test upload: " + uploadItem.getFile().getOriginalFilename());
        System.err.println("-------------------------------------------");

        //set extjs return - sucsess
        extjsFormResult.setSuccess(true);
    }catch(Exception ex){
        _log.error(ex,ex);
    }
    return extjsFormResult.toString();
}

вот мой код загрузки файла extjs

Ext.create('Ext.form.Panel', {
            title: 'File Uploader',
            width: 400,
            bodyPadding: 10,
            frame: true,
            renderTo: self._Namespace + 'file-upload',    
            items: [{
                xtype: 'filefield',
                name: 'file',
                fieldLabel: 'File',
                labelWidth: 50,
                msgTarget: 'side',
                allowBlank: false,
                anchor: '100%',
                buttonText: 'Select a File...'
            }],

            buttons: [{
                text: 'Upload',
                handler: function() {
                    var form = this.up('form').getForm();
                    if(form.isValid()){
                        form.submit({
                            url: self._Urls[0],
                            waitMsg: 'Uploading your file...',
                            success: function(form,action) {
                               alert("success");
                            },
                            failure: function(form,action){
                                alert("error");
                            }
                        });
                    }
                }
            }]
        });

1 Ответ

0 голосов
/ 27 октября 2011

Здесь есть несколько способов:


  1. Вручную вызвать ответ в виде текста, подобного этому

    response.setContentType ("text / html");// или json, если вы желаете

    responseText = "{'success': 'true'}";

    response.getWriter (). write (responseText);

  2. Используйте библиотеку Jackson lib, как описано здесь: Spring 3.0, отвечающий JSON с использованием конвертера сообщений Jackson

  3. Перейдите к Grails и забудьте о подробных конфигурациях MVC, Мой предпочтительный метод:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...