2011-01-25 1 views
1

Je pensais s'il est possible de gérer une requête Multipart qui n'est pas une requête d'action. Il y a une raison pourquoi il me semble impossible:Gestion de la requête Multipart qui n'est pas une demande d'action?

Seulement ActionRequest implémente getFile() type de méthodes. Je ne peux pas trouver un moyen facile comment obtenir le fichier sur demande autre que l'action demande

Et si je ne pas utiliser un formulaire HTML pour télécharger un fichier et je ne veux pas vue à rendre après la demande d'action - la phase de rendu se produit toujours après la phase d'action. Et si je veux créer une demande de publication (avec des fichiers) par ajax et utiliser le gestionnaire @ResourceMapping. Comment puis-je le sortir de ResourceRequest?

Merci beaucoup pour vos commentaires.

Répondre

1

Ceci est le "modèle" qui est afaik la meilleure façon de traiter les demandes multipart

Demande d'action de la couche de vue va à cette méthode:

@ActionMapping(params = "javax.portlet.action=sample") 
public void response(MultipartActionRequest request, ActionResponse response) { 
    response.setRenderParameter("javax.portlet.action", "success"); 
    List<MultipartFile> fileList = request.getFiles("file"); 
} 

render phase suit:

@RequestMapping(params = "javax.portlet.action=success") 
public ModelAndView process(RenderRequest request, Model model) throws IOException { 
    Map map = new HashMap(); 
    map.put("test", new Integer(1)); 
    return new ModelAndView("someView", map); 
} 

Vous créez une vue "Bean":

@Component("someView") 
public class SomeView extends AbstractView { 
    private Logger logger = Logger.getLogger(SomeView.class); 

    @Override 
    protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) 
      throws Exception { 
    logger.info("Resolving ajax request view - " + map); 
    JSONObject jsonObj = new JSONObject(map); 
    logger.info("content Type = " + getContentType()); 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(jsonObj.toString()); 
    response.getWriter().flush(); 
    } 
} 

Vous ajoutez BeanNameViewResolver dans votre contexte servlet/portlet:

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1" /> 
Questions connexes