2013-06-10 2 views
1

저는 primefaces를 처음 사용하고 프로젝트에서 fileUpload 구성 요소를 구현하려고합니다. 설명서를 열었지만 명확하지 않아 구현이 작동하지 않습니다.file 업로드 및 primefaces 업로드 된 파일의 null 값

는 문서의

첫 번째 줄은 말한다 :

". 할 우선이는 FileUpload 필터는 얼굴 서블릿에 매핑해야하는 다중 요청을 구문 분석하는 파일 업로드 필터를 구성하는 것입니다."

이 코드를 넣어 권고가있다 : 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> 

을 : "멀티 파트 요청을 구문 분석 ... 필터". 나는 이것이 하나 이상의 파일을 업로드하고 싶다면 그 코드를 사용해야한다는 것을 이해한다 (확실하지 않다). 그래서 나는 인터넷에서 발견 된 대부분의 예제에서이 코드를 구현해야한다는 것을 잊어야한다고 생각했습니다.

두 번째 문제 : 내 web.xml 파일에 필터를 구현하려고 할 때 가 :

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component  [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/wals]] 
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source) 
at java.util.concurrent.FutureTask.get(Unknown Source) 
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) 
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component  [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/wals]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
... 7 more 
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory 
at java.lang.Class.getDeclaredFields0(Native Method) 
at java.lang.Class.privateGetDeclaredFields(Unknown Source) 
at java.lang.Class.getDeclaredFields(Unknown Source) 
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106) 
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261) 
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationFilterAnnotations(WebAnnotationSet.java:110) 
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:66) 
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405) 
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881) 
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 7 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
... 21 more 

이 세 번째 문제 : 이이 발생할 수 있습니다

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5"> 

<display-name>Archetype Created Web Application</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/configuration-context.xml</param-value> 
</context-param> 

<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<listener> 
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

<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> 

<listener> 
    <listener- class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 


<!-- JSF Mapping --> 
<servlet> 
    <servlet-name>facesServlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>facesServlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>facesServlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>facesServlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 
<context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>redmond</param-value> 
</context-param> 

</web-app> 

나는 많은 오류를 얻을 수 제 1과 제 2 문제에 의해 그러나 나는 확실하지 않다. 나는 필터 코드를 포기하고 XHTML 파일에 같은 primefaces을 구현하는 경우 : fileUploadController 콩 단순히 정의

<h:form enctype="multipart/form-data"> 
<h:outputText value="Wybór zdjęcia: " /> 
<p:fileUpload value="#{fileUploadController.file}" mode="simple" /> 
<p:commandButton value="Submit" ajax="false"/> 
</h:form> 

는 :

@Component 
@Scope("session") 
@ManagedBean 
@SessionScoped 
public class FileUploadController 
{ 
private UploadedFile file; 

public UploadedFile getFile() 
{ 
    return file; 
} 

public void setFile(UploadedFile file) 
{ 
    this.file = file; 
} 
} 

나는 파일 필드에 null 값을 얻는다. 내 목표는 이미지를 업로드하고 Blob로 변경 한 다음 데이터베이스로 보냅니다. 나는 그 부분없이 내 프로젝트를 계속할 수 없기 때문에 당신의 도움에 매우 감사 할 것입니다.

+0

아마도 내 대답은 많은 사람들을 도울 수 있습니다. http://stackoverflow.com/a/33760453/1201725 – webmaster

답변

1

일부 종속성이 누락 된 것처럼 보입니다. 다른 스레드에서 유사한 오류가 발생하여 링크 here을 게시했습니다. 기본적으로 commons-fileupload 및 commons-io에 jar 파일을 추가해야한다고 제안합니다. 희망이 당신의 문제를 해결하는 데 도움이됩니다.

+2

당신은 절대적으로 옳습니다. 이 라이브러리를 추가 했으므로 오류가 없습니다. 고맙습니다. 그러나 업로드 된 파일의 null 값에는 여전히 문제가 있습니다. 나는 2 가지 요인이 문제의 원인 일 수 있음을 읽었다. 먼저 enctype = "multipart/form-data"태그를 추가해야합니다. 두 번째 이유는 web.xml에서 문제가 될 수 있습니다. 그래서 무엇이 잘못 될지 모르기 때문에이 게시물을 내 게시물로 업데이트했습니다. 당신이 나를 도울 수? – user2374573

+0

@ user2374573 해피 나는 그 답을 얻기 위해 1+ 이상을 자유롭게주고 도울 수 있었다. 또한 새로운 오류를 게시 할 수 있습니까? 그래서, 내가 더 너를 도울 수있어. 새 스레드를 열거 나 기존 스레드에 추가하려는 경우 확실하지 않습니다. –

+0

미안하지만 15 점 미만이므로 1 점 이상을 줄 수는 없습니다. 나는 어떤 오류도 내지 않는다. 업로드 한 직후 파일 필드에 여전히 null 값이 있는데 이것이 문제입니다. – user2374573

0

서블릿 이름이 잘못되어 문제가 발생했습니다.

변경 :

<servlet-name>Faces Servlet</servlet-name> 

<servlet-name>facesServlet</servlet-name> 

에 문제를 해결했다. 그것은 팀 프로젝트이고 나는 그 이름이 바뀌 었음을 알아 차리지 못했습니다. 그래서 그것에 조심하십시오. 도와 주셔서 감사합니다.

0

파일 업로드 및 업로드 된 파일

다운로드 평민 - 파일 업로드-1.2.1.jar, 공유지-IO-2.0.1.jar에 대한 null 값을 primefaces 및 WEB_INF/lib에 넣어.그렇지 않으면 pom.xml 파일에 종속성을 추가하십시오. 문제가 해결 될 것입니다.

1

내 경우에는 Faces 서블릿의 정의에 문제가 없습니다. Servlet 3.0부터는 컨테이너에 의해 자동으로 선언됩니다. 분명히 서블릿은 FacesServlet과 다른 이름을 가지게 될 것이고, FileUploadFilter 정의를 깨뜨린다.

특히 - 내 문제는 청취자가 고급 업 로더를 호출하지 않았으며 파일 변수가 간단한 업 로더로 설정되지 않았다는 것입니다.

https://docs.oracle.com/javaee/6/api/javax/faces/webapp/FacesServlet.html

솔루션은 web.xml의 얼굴 서블릿 (심지어 자동으로 선언되는)을 선언했다.

제 문제는 Jboss 7.1에서 Primefaces 5.0과 함께 나타났습니다. 사실 Faces 서블릿이 정의되어 있지 않다는 것을 알아챌 때까지 여기서 모든 조언을 따라했습니다. 응용 프로그램의 다른 부분은 자동화 된 선언만으로도 문제가 없으므로 해결책을 찾고있는 동안 시간을 ​​보냅니다. 희망은 누군가를 도울 것입니다.