Почему мой инструмент загрузки PrimeFaces не работает? - PullRequest
0 голосов
/ 28 марта 2011

Я пытался использовать инструмент загрузки простых лиц (http://www.primefaces.org/showcase/ui/fileUploadSingle.jsf).Мне удается правильно отобразить его, и похоже, что он работает.Но когда я иду проверить базу данных, она пуста.Почему это не загрузка?Я уверен, что EJB, которые обращаются к базе данных, хорошо запрограммированы.

Также я замечаю это сообщение в консоли, когда иду на страницу, которая извлекает данные из БД.

SEVERE: строка 1:61 нет жизнеспособной альтернативы для символа ';'

Я не уверен, что это как-то связано с этим.Я не вижу других ошибок.

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

<p:fileUpload fileUploadListener="#{uploadController.handleFileUpload}"   
        allowTypes="*.txt;*.doc;*.pdf;" description="Text Documents"/>

Это управляемый компонент:

@ManagedBean
@RequestScoped
public class UploadController {

@EJB
private IFileUploaderEJB fileUploaderEJB;
    private Logger logger = LoggerFactory.getLogger(UploadController.class);

public void handleFileUpload(FileUploadEvent event) {
    String fileName = event.getFile().getFileName();
    String contentType = event.getFile().getContentType();
    byte[] bytes = event.getFile().getContents();

    Garbage garbage = new Garbage();
    garbage.setFilename(fileName);
    garbage.setFile(bytes);
    garbage.setDescription("info about the file");
    garbage.setFileType(contentType);
    fileUploaderEJB.uploadGarbage(garbage);

    logger.info("Uploaded: {}", event.getFile().getFileName());

    FacesMessage msg = new FacesMessage("Succesful", event.getFile()
            .getFileName() + " is uploaded.");
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

Это EJBдоступ к БД (я уверен, что эта часть работает правильно):

@Stateless(name = "ejbs/FileUploaderEJB")
public class FileUploaderEJB implements IFileUploaderEJB {

@PersistenceContext
private EntityManager em;


public Garbage uploadGarbage(Garbage garbage) {
    Date date = new Date();
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");        

    garbage.setUploadDate(dateFormat.format(date));     


    em.persist(garbage);

    return garbage; 
}

} ​​

Почему данные не добавляются в базу данных?

-------------------------------------------ОБНОВИТЬ----------------------------------------

private UploadedFile uploadedFile;

public void handleFileUpload(FileUploadEvent event) {
    System.out.println("INSIDE THE METHOD!!!!");
    uploadedFile = event.getFile();
    String fileName = FilenameUtils.getName(uploadedFile.getFileName());
    String contentType = uploadedFile.getContentType();
    byte[] bytes = uploadedFile.getContents();

    // Now you can save bytes in DB (and also content type?)
    Garbage garbage = new Garbage();
    garbage.setFilename(fileName);
    garbage.setFile(bytes);
    garbage.setDescription("info about the file");
    garbage.setFileType("File extension");
    fileUploaderEJB.uploadGarbage(garbage);

    FacesContext.getCurrentInstance().addMessage(
            null,
            new FacesMessage(String.format(
                    "File '%s' of type '%s' successfully uploaded!",
                    fileName, contentType)));
}

Вот мой web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/pages/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>pages/index.jsp</welcome-file>
</welcome-file-list>        
<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping> 
    </web-app> 

Ответы [ 2 ]

2 голосов
/ 27 августа 2012

У меня была такая же проблема, и я решил ее, добавив jar-файлы в WEB-INF / lib:

  • Обще-ю-2.2.jar
  • Обще-FileUpload-1.2.2.jar

и добавьте фильтр в web.xml:

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping>

Я надеюсь, что это работает для вас!

1 голос
/ 28 марта 2011

Мне просто нужно было добавить это в мой web.xml исходный код был правильным.

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter
    </filter-class>
    <init-param>
        <param-name>uploadDirectory</param-name>
        <param-value>/uploaded</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Спасибо за ваше время

...