2014-02-02 5 views
0

Я написал код, чтобы получить данные детали из запроса сервлета для загрузки файла, но список деталей возвращает нулевой размер. Я использую JBoss Weld в проекте JEE.Интерфейс детали не работает с JBoss Weld в Tomcat 7?

Но если я удалю конфигурацию Weld из файла web.xml, тогда она работает нормально.

Конфигурация web.xml является:

<listener> 
    <listener-class> 
     org.jboss.weld.environment.servlet.Listener</listener-class> 
    </listener> 
    <resource-env-ref> 
     <description> 
      Object factory for the CDI Bean Manager 
     </description> 
     <resource-env-ref-name>BeanManager</resource-env-ref-name> 
     <resource-env-ref-type> 
      javax.enterprise.inject.spi.BeanManager 
     </resource-env-ref-type> 
    </resource-env-ref> 

Серверный код в Servlet:

@WebServlet("/upload") 
@MultipartConfig 

public class UploadServlet extends HttpServlet { 
    protected void doPost(HttpServletRequest request, 
          HttpServletResponse response) 
          throws ServletException, IOException { 
     Collection<Part> parts = request.getParts(); 
     System.out.println(parts.size()); 
    } 
} 

на стороне клиента JavaScript:

$('#input-file').change(function(e) { 
    var obj = { 
     "name" : "samik" 
    }; 
    var file = e.target.files[0]; 
    var formData = new FormData(); 
    formData.append('file', file); 
    formData.append('other', JSON.stringify(obj)); 

    $.ajax({ 
     url : "upload", 
     type : "POST", 
     data : formData, 
     contentType : false, 
     processData : false, 
     dataType : "json", 
     success : function() { } 
    }); 
}); 
+0

Некоторые вопросы: вы уверены, что в элементе есть допустимое значение: 'e.target.files [0]'? Аннотирование '@ MultipartConfig 'указывает, что сервлет ожидает, что запросы будут выполняться с использованием типа MIME типа« multipart/form-data »; попробовали ли вы вызвать 'request.getHeaders' и посмотреть, какой тип контента предназначен для запросов, отправленных вашим JavaScript? Вы упомянули, что если вы удалите _Weld_, все будет работать правильно; как выглядит ваш сервлет-код в этом случае? –

+0

Да e.target.files [0] дает правильные данные. заголовки запросов одинаковы в обоих случаях. Код сервлета одинаковый для обоих случаев – samik

+0

Что находится в каталоге _/WEB-INF/lib_? Есть ли ошибки в журнале Tomcat? –

ответ

0

<listener> и <resource-env-ref> записей в вашем web.xml кажутся правильными; однако, поскольку Tomcat JNDI доступен только для чтения, есть дополнительная конфигурация, которую вы должны включить. Предполагая, что вы развертывания WAR в Tomcat, вы должны включать в файл с именем: context.xml в каталоге META-INF в вашем WAR, который содержит следующую запись:

<Context> 
    <Resource name="BeanManager" auth="Container" 
     type="javax.enterprise.inject.spi.BeanManager" 
      factory="org.jboss.weld.resources.ManagerObjectFactory" /> 
</Context> 

Без этой записи в META-INF/context.xml, включенный в вашу WAR, JBoss Weld не сможет автоматически привязать расширение BeanManager к JNDI.

+0

i do that.but его не работает. Weld отлично работает без контекста.xml. Но его отключить работу с загрузкой данных формы. – samik

+0

только проблема с multipart formdata upload.i написать сервлет (3.0) для загрузки файла с аннотацией @ MultipartConfig.but multipart данные, отклоненные сваркой – samik

+0

@samik Ну, похоже, что Weld повлиял на запрос на загрузку данных , поэтому я думал, что у вас может быть проблема с конфигурацией, которая вызвала сбой, который привел к другим сбоям. Откуда вы знаете, что Weld работает нормально без context.xml? Есть ли какие-либо ошибки, предупреждения или что-то необычное в журналах Tomcat? –

Смежные вопросы