JSF 2.0 téléchargement de Fichier
Je suis à la recherche autour de quelques blogs, pour essayer de trouver comment télécharger des fichiers en utilisant JSF 2.0
Mais toutes les solutions sorte de me confondre. Je voudrais savoir que dois-je exactement besoin pour être en mesure de télécharger un fichier(MP3, PDF, vidéo... ce que jamais type) et de les stocker dans une base de données comme un @Lob.
C'est ce que j'ai fait jusqu'à présent:
-
J'ai créé une entité qui a un attribut de type byte[] et il est également annoté avec @Lob annotation.
-
J'ai créé un EJB qui va introduire l'entité avec une méthode qui a un byte[] comme paramètre et l'insère dans la base de données à l'aide de la classe EntityManager( persistent méthode).
-
J'ai créé une page JSF avec une balise input de type "fichier" et un bouton envoyer
-
J'ai préparé un managed bean pour l'échange d'informations sur le fichier avec le JSF page.
Maintenant je suis coincé, et j'ai beaucoup de doutes:
-
Que dois-je faire pour passer le fichier à partir de la JSF pour le managed bean et ensuite de le transformer en un byte[](Pour être capable de les gérer à l'EJB)?
-
Comment un servlet-il m'aider?
-
Ai-je besoin d'une servlet pour ce faire?
-
Aussi j'ai trouvé que dans certains blog il mentionne quelque chose à propos de servlets 3.0, mais je ne sais pas si mon environnement de travail est de l'utiliser, comment puis si je suis à l'aide de servlets 3.0 (je suis à l'aide de JEE6)?
Je n'ai jamais fait de téléchargement de fichiers avant et aussi je ne suis pas très familier avec les servlets. Je suis confus, quelqu'un pourrait me donner quelques conseils, s'il vous plaît?
- JSF 2.2 est l'obtention d'un composant téléchargement de fichier qui prend en charge Ajax, appelé InputFile. Pour plus de détails: jdevelopment.nl/jsf-22/#802
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ce (vieux) question et la réponse suppose JSF 2.0/2.1. Depuis JSF 2.2 il y a un natif
<h:inputFile>
composant sans la nécessité pour la 3e partie des bibliothèques de composants. Voir aussi Comment télécharger des fichiers en utilisant JSF 2.2 <h:inputFile>? Où est le Fichier enregistré?La façon la plus simple serait d'utiliser Tomahawk pour JSF 2.0. Il propose un
<t:inputFileUpload>
composant.Voici une étape par étape tutoriel:
Créer un nouveau projet web dynamique pour la Servlet 3.0 et JSF 2.0. Le
web.xml
doit se conformer Servlet 3.0 et contiennent déjà le JSF servlet:La
faces-config.xml
doit se conformer JSF 2.0 spec:Télécharger Tomahawk 1.1.10 JSF 2.0. Extraire le fichier zip, aller à la
/lib
dossier et copiez tous les*.jar
fichiers dans votre/WEB-INF/lib
.Il sont 18 fichiers, dont
batik*.jar
etxml*.jar
sont inutiles pour l'utilisation seule de lat:inputFileUpload
composant. Vous pourriez les laisser à l'écart.Configurer le Tomahawk extensions de filtre dans
web.xml
. C'est celui qui est responsable de la gestionmultipart/form-data
demandes qui est nécessaire pour être en mesure d'envoyer des fichiers via HTTP.Noter que le
<servlet-name>
doit correspondre exactement<servlet-name>
de laFacesServlet
comme vous l'avez défini dansweb.xml
.Créer un simple Facelet,
upload.xhtml
:Note le
enctype="multipart/form-data"
attribut sur<h:form>
, c'est très important pour être en mesure d'envoyer des fichiers par HTTP.Créer un simple managed bean,
com.example.Bean
:Qui doit l'être. L'ouvrir en http://localhost:8080/projectname/upload.xhtml.
À vos questions concrètes:
Cela est répondu ci-dessus.
Il est en mesure de traiter et de contrôle des requêtes/réponses HTTP. Dans un ACI de l'environnement, de la
FacesServlet
déjà fait tout le travail.Dans un ACI de l'environnement, de la
FacesServlet
est obligatoire. Mais c'est déjà fournies par l'API, vous n'avez pas besoin d'écrire vous-même. Cependant, pour être en mesure de télécharger des fichiers à partir d'une base de données, un autre servlet est certainement utile. Vous pouvez trouver un exemple de base ici: Servlet pour servir du contenu statique.Si vous êtes en utilisant un conteneur de Servlet 3.0 comme Glassfish 3, JBoss as, 6, Tomcat 7, etc et le
web.xml
est déclaré en tant que Servlet 3.0, alors vous êtes certainement à l'aide de Servlet 3.0. Servlet 3.0 est la partie de Java EE 6.http://myfaces.apache.org/tomahawk
espace de noms,inputHtml
. Avec quelques recherches, je vois que c'est le seul fichier deMETA-INF.resources.org.apache.myfaces.custom
paquet. Je PEUX encore utiliser le composant, avec ce qui semble être plein de fonctionnalités, mais je reçois des avertissements:JSF1064: Unable to find or serve resource, inputFileUpload.xhtml, from library, org.apache.myfaces.custom
. Toute idée de ce dont il s'agit? J'ai vu d'autres demandent à propos de la même chose, mais toujours 0 réponses sur ces postes.Pour être complet, je veux juste fournir un entièrement fonctionnel autonome exemple de la façon dont cela est fait avec JSF 2.2, soit avec des non-Ajax et les requêtes Ajax. Gardez à l'esprit JSF 2.2 utilisations des espaces de noms différents et vous besoin de travailler avec un conteneur de Servlet 3.0 (comme Tomcat 7.0.x, JBoss 6.x et 7.x et GlassFish 3.x).
fileUpload.xhtml
UploadBean.java:
Voir aussi:
file
est alywas nul...?<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> </filter>
<h:form enctype="multipart/form-data">
balise comme dans le PF "de base" par exemple. Bonne chance!Je vous conseille d'utiliser un companent bibliothèque comme Tomahawk est
<t:inputFileUpload>
ou PrimeFaces<p:fileUpload>
.BalusC a aussi un beau billet de blog sur Le téléchargement de fichiers avec JSF 2.0 et Servlet 3.0.
BalusC du blog: Le téléchargement de fichiers avec JSF 2.0 et Servlet 3.0 est ce qui m'a sauvé, parce que j'avais des problèmes à l'exécution de RichFaces 4 fileUpload tag avec Spring WebFlow.
Il vaut la peine de modifier BalusC du code du Printemps
MultipartResolver
- vous n'avez pas besoin de sonMultipartMap
de un autre post de blog.Je l'ai réalisé par la modification d'un
decode
méthode dansFileRenderer
comme ceci:Un
UploadedFile
est un simple serializable POJO pour renvoyer les résultats à la sauvegarde de haricot.Dans JSF 2.2 vous pouvez facilement télécharger le fichier à l'aide de la balise sans l'aide de commons-io ou d'un filtre. Ce tag de soutien à la fois normal et ajax processus.
Normal:
Ajax:
De la conception de votre bean géré comme suit:
La façon la plus simple est probablement d'utiliser le inputFileUpload balise que vous pouvez
trouver dans MyFaces:
http://myfaces.apache.org/
IceFaces2.0 a un, http://wiki.icefaces.org/display/ICE/FileEntry n'ai pas essayé de la mettre en œuvre, mais le téléchargement a les exemples d'applications et il fonctionne sous Tomcat 6 (servlet 2.5, donc pas JEE6)
Vous devez ajouter
commons-fileupload-1.2.1.jar
dans notre projet de construction de Chemin de1.Configurer web.xml fichier:
2. Créer ManagedBean
3.fichier jsf(xhtml)