2015-12-08 2 views
0

J'ai une application seam 2.2.2 et j'essaie de personnaliser le plugin ckeditor fileUpload.Fichier custom ckeditorUpload en java avec fichier apacheUpload parseRequest renvoie la liste vide

La solution que je suis venu est:

1) l'éditeur pour init tous les éléments avec la classe de style 'éditeur':

var elements = CKEDITOR.document.find('.editor'); 
for(var i = 0; i< elements["$"].length; i++){ 
     CKEDITOR.replace(elements["$"][i], { 
      filebrowserUploadUrl: rootPath + "/cops/filebrowserUploadUrl.seam" 
     }); 
    } 

2) Set filebrowserUploadUrl.seam, à ne rien faire à exécuter:

#{attachmentController.sendImageToServer()} 

3) mettre en œuvre le back-end avec apache communes fileUpload:

public void sendImageToServer() 
{  
    HttpServletRequest request = ServletContexts.instance().getRequest(); 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 

    File repository = (File) request.getAttribute("javax.servlet.context.tempdir"); 
    factory.setRepository(repository); 
    ServletFileUpload upload = new ServletFileUpload(factory); 

    try 
    { 
     List<FileItem> items = upload.parseRequest(request); 
     processItems(items); //set the file data to specific att 
     saveOpenAttachment(); //save the file to disk 
    } 

Cette méthode s'appelle tout droit. Je peux déboguer un paramètre de téléchargement (avec des données binaires) à l'intérieur de la requête mais upload.parseRequest (request) retourne une liste vide. J'ai cherché ce problème et j'ai fait tout ce que je pouvais faire, mais je ne suis pas en mesure de dire si l'application personnalisée FaceletViewHandler est à l'origine de ce problème. Bien que si je pouvais trouver la solution à ce problème, je serais très satisfait, je pense que ce n'est pas une bonne solution. Peut-être que l'intégration de Seam avec des facelets pourrait me donner une meilleure solution. Je ne sais vraiment pas. Une suggestion?

+0

Je reçois la suggestion de travail en faisant la liste articles = new ServletFileUpload (nouveau DiskFileItemFactory()) parseRequest (requête) à la fève et la mise en dans mon fichier components.xml. Mais encore un doute: tout autre modèle d'URL l'écrase. Quelqu'un sait-il pourquoi? –

Répondre

0

solution finale était comme des demandes de poignée de filtre Seam multipart:

ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
try 
{ 
    if (!(request instanceof MultipartRequest)) 
    { 
    request = unwrapMultipartRequest(request); 
    } 

    if (request instanceof MultipartRequest) 
    { 
    MultipartRequest multipartRequest = (MultipartRequest) request; 

    String clientId = "upload"; 
    setFileData(multipartRequest.getFileBytes(clientId)); 
    setFileContentType(multipartRequest.getFileContentType(clientId)); 
    setFileName(multipartRequest.getFileName(clientId)); 
    saveOpenAttachment(); 
    } 
} 

Maintenant, je traiter la demande comme Seam fait, et ne nécessitent pas le web: config multipart-filtre qui brisait d'autres types de demande.