How To Use Input Type File In Jsf Tutorial

/ Comments off
Active3 years, 4 months ago

I am looking around a few blogs, to try to find how to upload files using JSF 2.0But all the solutions kind of confuse me. I would like to know what do I exactly need to be able to successfully upload a file(MP3, PDF, video. what ever type) and store it in a database as a @Lob. This is what I have done so far:

In this tutorial, let us see how to upload files from client to server with the use of JSF h:inputFile tag. Also we will see that how to validate the file at server side by writing a file validator class annotated with @FacesValidator and with the use of f:validator> tag in JSF. Once you define the object in faces-config.xml you can use the attributes of Person in your JSF UI components, e.g. By binding the value 'firstName' of this object to an JSF input field. JSF uses the Unified Expression Language (EL) to bind UI components to object attributes or methods.

  • I created an entity that has an attribute of type byte[] and it is also annotated with a @Lob annotation.

  • I created an EJB that will introduce the entity with with a method that has a byte[] as a parameter and inserts it into the database using the EntityManager class( persist method).

  • I created a JSF page with an input tag of type 'file' and a submit button

  • I prepared a managed bean to interchange information about the file with the JSF page.

Now I am stuck, and I have lots of doubts:

  • What should I do to pass the file from the JSF to the managed bean and then transform it to a byte[](To be able to handle it over to the EJB)?

  • How can a servlet help me?

  • Do I need a servlet to do this?

  • Also I found that in some blog it mentions something about servlets 3.0, but I don't know if my working environment is using it, how can if I am using servlets 3.0 (I am using JEE6)?

I never did file upload before and also I am not very familiar with servlets. I am confused, someone could give me some starting tips, please?

BalusC
884k312 gold badges3254 silver badges3287 bronze badges
sfrjsfrj
7,68828 gold badges126 silver badges191 bronze badges

8 Answers

First of all, this (old) question and answer assumes JSF 2.0/2.1. Since JSF 2.2 there's a native <h:inputFile> component without the need for 3rd party component libraries. See also How to upload file using JSF 2.2 <h:inputFile>? Where is the saved File?

The easiest way would be using Tomahawk for JSF 2.0. It offers a <t:inputFileUpload> component.

Here's a step-by-step tutorial:

  • Create a blank dynamic web project for Servlet 3.0 and JSF 2.0. The web.xml must comply Servlet 3.0 spec and already contain the JSF servlet:

    The faces-config.xml must comply JSF 2.0 spec:

  • Download Tomahawk 1.1.10 for JSF 2.0. Extract the zip file, go to the /lib folder and copy all *.jar files into your /WEB-INF/lib.

    It are 18 files, of which batik*.jar and xml*.jar are unnecessary for using alone the t:inputFileUpload component. You could leave them away.

  • Configure the Tomahawk extensions filter in web.xml. It's the one who's responsible for handling multipart/form-data requests which is required to be able to send files over HTTP.

    Note that the <servlet-name> must match the exact <servlet-name> of the FacesServlet as you've definied in web.xml.

  • Create a simple Facelet, upload.xhtml:

    Note the enctype='multipart/form-data' attribute on <h:form>, this is very important in order to be able to send files with HTTP.

  • Create a simple managed bean, com.example.Bean:

That should be it. Open it by http://localhost:8080/projectname/upload.xhtml.

As to your concrete questions:

what should i do to pass the file from the JSF to the managed bean and then transform it to a byte[](To be able to handle it over to the EJB)?

This is answered above.

How can a servlet help me?

It is able to process and control HTTP requests/responses. In a JSF environment, the FacesServlet already does all the work.

Do i need a servlet to do this?

In a JSF environment, the FacesServlet is mandatory. But it's already provided by the API, you don't need to write one yourself. However, to be able to download files from a database, another servlet is definitely useful. You can find a basic example here: Servlet for serving static content.

Also i found that in some blog it mentions something about servlets 3.0, but i dont know if my working enviroment is ussing it, how can if i am ussing servlets 3.0(I am ussing JEE6)?

If you're using Servlet 3.0 container like Glassfish 3, JBoss AS 6, Tomcat 7, etc and the web.xml is declared as Servlet 3.0, then you're definitely using Servlet 3.0. Servlet 3.0 is part of Java EE 6.

Community
BalusCBalusC
884k312 gold badges3254 silver badges3287 bronze badges

For completeness, I just want to provide a fully functional self contained example of how this is done with JSF 2.2, either with non-Ajax and Ajax requests. Keep in mind JSF 2.2 uses different namespaces and you need to be working with a Servlet 3.0 container (as Tomcat 7.0.x, JBoss AS 6.x and 7.x and GlassFish 3.x are).

fileUpload.xhtml

UploadBean.java:

See also:

Community
Xtreme BikerXtreme Biker
20.6k11 gold badges96 silver badges170 bronze badges

I would recommend using a companent library like Tomahawk's <t:inputFileUpload> or PrimeFaces <p:fileUpload>.

BalusC also has a nice blog post about Uploading files with JSF 2.0 and Servlet 3.0.

jacktrades
3,75211 gold badges45 silver badges77 bronze badges
MarkMark
11.8k9 gold badges36 silver badges54 bronze badges

BalusC's blog post: Uploading files with JSF 2.0 and Servlet 3.0 is what saved me, because I had problems running RichFaces 4 fileUpload tag with Spring WebFlow.

It's worth to modify BalusC's code to use Spring's MultipartResolver - you don't need his MultipartMap from another blog post.

I achieved it by modifying a decode method in FileRenderer like this:

A UploadedFile is a simple serializable POJO used to return results to backing bean.

Maciek ŁozińskiMaciek Łoziński

In JSF 2.2 you can easily upload file using tag without using commons-io or filter. This tag support both normal and ajax process.

Normal:

Ajax:

Design your managed bean as follows:

MasudulMasudul
19.3k3 gold badges35 silver badges48 bronze badges

The easiest way is probably to use the inputFileUpload tag that you canfind in MyFaces:

Vladimir IvanovVladimir Ivanov
38.4k16 gold badges72 silver badges97 bronze badges

IceFaces2.0 has one, http://wiki.icefaces.org/display/ICE/FileEntry Haven't tried implementing it yet, but the download has sample apps and it works under Tomcat 6 (servlet 2.5, so not JEE6)

JimOJimO

You must add commons-fileupload-1.2.1.jar in our project Build Path

1.Configure web.xml file:

2. Create ManagedBean

3.jsf file(xhtml)

user2354035

protected by BalusCMar 21 '13 at 12:32

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged jsffile-uploadjsf-2 or ask your own question.

  • JSF Tutorial
  • JSF Useful Resources
  • Selected Reading

The h:inputHidden tag renders an HTML input element of the type 'hidden'.

JSF Tag

Rendered Output

Tag Attributes

Input Type File Javascript

S.NoAttribute & Description
1

id

Identifier for a component

2

binding

Reference to the component that can be used in a backing bean

3

rendered

A boolean; false suppresses rendering

4

styleClass

Cascading stylesheet (CSS) class name

5

value

A component’s value, typically a value binding

6

valueChangeListener

A method binding to a method that responds to value changes Obd2 serial cable driver.

7

converter

Converter class name

8

validator

Class name of a validator that’s created and attached to a component

9

required

A boolean; if true, requires a value to be entered in the associated field

10

accesskey

A key, typically combined with a system-defined metakey, that gives focus to an element

11

accept

Comma-separated list of content types for a form

12

accept-charset

Comma- or space-separated list of character encodings for a form. The accept-charset attribute is specified with the JSF HTML attribute named acceptcharset.

13

cols

Number of columns

14

border

Pixel value for an element’s border width

15

charset

Character encoding for a linked resource

16

coords

Coordinates for an element whose shape is a rectangle, circle, or polygon

17

dir

Direction for text. Valid values are ltr (left to right) and rtl (right to left).

18

disabled

Disabled state of an input element or button

19

hreflang

Base language of a resource specified with the href attribute; hreflang may only be used with href.

20

lang

Base language of an element’s attributes and text

21

rows

Number of rows

22

readonly

Read-only state of an input field; the text can be selected in a readonly field but not edited

23

style

Inline style information

24

tabindex

Numerical value specifying a tab index

25

target

The name of a frame in which a document is opened

26

title

A title, used for accessibility, that describes an element. Visual browsers typically create tooltips for the title’s value

27

type

Type of a link; for example, stylesheet

28

width

Width of an element

29

onblur

Element loses focus

30

onchange

Element’s value changes

31

onclick

Mouse button is clicked over the element

32

ondblclick

Mouse button is double-clicked over the element

33

onfocus

Element receives focus

34

onkeydown

Key is pressed

35

onkeypress

Key is pressed and subsequently released

36

onkeyup

Key is released

37

onmousedown

Mouse button is pressed over the element

38

onmousemove

Mouse moves over the element

39

onmouseout

Mouse leaves the element’s area

40

onmouseover

Mouse moves onto an element

41

onmouseup

Mouse button is released

42

onreset

Form is reset

43

onselect

Text is selected in an input field

44

immediate

Perfect resize 9 download mac. Process validation early in the life cycle

Example Application

Let us create a test JSF application to test the above tag.

StepDescription
1Create a project with a name helloworld under a package com.tutorialspoint.test as explained in the JSF - First Application chapter.
2Modify home.xhtml as explained below. Keep rest of the files unchanged.
3Compile and run the application to make sure business logic is working as per the requirements.
4Finally, build the application in the form of war file and deploy it in Apache Tomcat Webserver.
5Launch your web application using appropriate URL as explained below in the last step.

How To Use Input Type File In Jsf Tutorial 2017

home.xhtml

Once you are ready with all the changes done, let us compile and run the application as we did in JSF - Create Application chapter. If everything is fine with your application, this will produce the following result.

How To Use Input Type File In Jsf Tutorial For Beginners

jsf_basic_tags.htm