JSF uploader un fichier (second try)

Tagged:

Bon je lache pas l'affaire et sur les conseil d'un commentaire j'ai testé tomahawk de apache ... Et je regrette pas d'avoir compris comment marchait JSF avec ma méthode pour uploader des fichiers mais néanmoins c'est beaucoup plus facile de mettre tomohawk en place que mon broll =)

Bref on se rend sur leur page de téléchargement et on télécharge tomahawk que l'on met dans son classpath (basiquement dans son WEB-INF/lib)

Si on prend par exemple la classe qui va traiter le fichier :

public class TestClass {
 
	private Logger log = Logger.getLogger(getClass());
	private UploadedFile file = null; 
 
	public void setFile(UploadedFile f) {
		log.debug(f.getName());
		log.debug("Size :" + f.getSize());
		this.file = f;
	}
	public UploadedFile getFile() {
		return file;
	}
	
	public String test() {
		try {
			InputStreamReader isr = new InputStreamReader(file.getInputStream());
			BufferedReader br = new BufferedReader(isr);
 
			String tmp = null;
			while ((tmp = br.readLine()) != null) {
				log.debug(tmp);
			}
			
			br.close();
			isr.close();
		} catch (Exception e) {
			log.error(e, e);
		}
		return null;
	}
	
}

Et le code html correspondant :

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="html"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="faces"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

<html:form id="uploadForm" enctype="multipart/form-data" >
	<t:inputFileUpload id="fileupload"
		value="#{testClass.file}"
		storage="file"
		required="true" />
	<html:message for="fileupload" showDetail="true" />
	<html:commandButton value="Send" action="#{testClass.test}" />
</html:form>

Il ne nous reste simplement qu'a adapter le web.xml et non le config.xml :

	<filter>
		<filter-name>MyFacesExtensionsFilter</filter-name>
		<filter-class>
			org.apache.myfaces.webapp.filter.ExtensionsFilter
		</filter-class>
		<init-param>
			<param-name>maxFileSize</param-name>
			<param-value>2m</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>MyFacesExtensionsFilter</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
	</filter-mapping>

Et voili ça marche ... magique non ?

Bravo les gars qui ont fait ça =) et surtout merci !

Comments

Hmmm, oui, puis c'est pas verbeux.

hello
il manquerait pas un peu la déclaration pour le bean managé ?

j'ai une question concernant la classe TestClass, j'obtient des erreurs de compilation pour Logger.getLogger(getClass());
et log.debug(...) ça utilise quel librairie ce type de logger svp

ces lignes sont-elles importantes pour le déroulement du transfert du fichier ?

merci d'avance

Le log c'est jamais important pour le déroulement des opérations, c'est souvent utile ... si tu le vire ça va aussi :)

Je ne met jamais les déclarations, avec eclipse tu fais CTRL+SHIFT+O et il te les fait tout seul alors "how cares ?"

Pour info j'utilise log4j pour logger, tu peux aller voir ici : http://logging.apache.org/log4j/docs/index.html

Bonjour,

j'essaie desesperement de faire fonctionner l'upload avec tomahawk sous Eclipse sur un server apache tomcat. Quand je lance le serveur, il y a une erreure "org.apache.myfaces.component.html.util.ExtensionsFilter not found".

Dans mon dossier WEB-INF/lib j'ai les librairies suivantes:
commons-beanutils_1.7.0.jar
commons-codec-1.3.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-el.jar
commons-fileupload-1.2.1.jar
commons-lang-2.1.jar
commons-logging-1.1.1.jar
commons-validator-1.3.1.jar
jstl-1.1.2.jar
myfaces-api-1.2.5.jar
myfaces-impl-1.2.5.jar
tomahawk-1.1.8.jar

J'ai verifié dans le jar de tomahawk org.apache.myfaces.component.html.util.ExtensionsFilter y est ainsi que org.apache.myfaces.webapp.filter.ExtensionsFilter.
J'ai essayé tout ce que j'ai pu avec les différentes versions de librairies mais ca ne fonctionne pas, pouvez vous m'aider svp ?
Merci d'avance.

Mon web.xml est le suivant:

<?xml version="1.0" encoding="UTF-8"?>
<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"
id="WebApp_ID" version="2.5">

<display-name>test</display-name>

<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>20m</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<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>/faces/*</url-pattern>
</servlet-mapping>
</web-app>

Log de l'erreur:
...
ATTENTION: [NavigationRuleRule]{faces-config/navigation-rule} Merge(*)
23 nov. 2008 16:44:14 org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception au d�marrage du filtre ExtensionsFilter
java.lang.ClassNotFoundException: org.apache.myfaces.component.html.util.ExtensionsFilter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
...

C'est bon j'ai trouvé mon problème après 2 jours de recherches :| Sur le server tomcat étaient configurés deux projets. Il y avait donc une corruption dans les librairies entre les projets.