private final static int TEST = 1;
private final static int SHIFT = 2;
private int coderType = SHIFT; // default value
Java Platform, Enterprise Edition (Java EE) 8 The Java EE Tutorial |
Previous | Next | Contents |
The producermethods
example shows how to use a producer method to
choose between two beans at runtime, as described in
Using Producer Methods, Producer Fields, and
Disposer Methods in CDI Applications. It is very similar to the
encoder
example described in The
encoder Example: Using Alternatives. The example includes the same
interface and two implementations of it, a managed bean, a Facelets
page, and configuration files. It also contains a qualifier type. When
you run it, you do not need to edit the beans.xml
file and redeploy
the application to change its behavior.
The following topics are addressed here:
The components of producermethods
are very much like those for
encoder
, with some significant differences.
Neither implementation of the Coder
bean is annotated @Alternative
,
and there is no beans.xml
file, because it is not needed.
The Facelets page and the managed bean, CoderBean
, have an additional
property, coderType
, that allows the user to specify at runtime which
implementation to use. In addition, the managed bean has a producer
method that selects the implementation using a qualifier type,
@Chosen
.
The bean declares two constants that specify whether the coder type is the test implementation or the implementation that actually shifts letters:
private final static int TEST = 1;
private final static int SHIFT = 2;
private int coderType = SHIFT; // default value
The producer method, annotated with @Produces
and @Chosen
as well as
@RequestScoped
(so that it lasts only for the duration of a single
request and response), returns one of the two implementations based on
the coderType
supplied by the user.
@Produces
@Chosen
@RequestScoped
public Coder getCoder() {
switch (coderType) {
case TEST:
return new TestCoderImpl();
case SHIFT:
return new CoderImpl();
default:
return null;
}
}
Finally, the managed bean injects the chosen implementation, specifying the same qualifier as that returned by the producer method to resolve ambiguities:
@Inject
@Chosen
@RequestScoped
Coder coder;
The Facelets page contains modified instructions and a pair of options
whose selected value is assigned to the property coderBean.coderType
:
<h2>String Encoder</h2>
<p>Select Test or Shift, type a string and an integer, then click
Encode.</p>
<p>If you select Test, the TestCoderImpl bean will display the
argument values.</p>
<p>If you select Shift, the CoderImpl bean will return a string that
shifts the letters in the original string by the value you specify.
The value must be between 0 and 26.</p>
<h:form id="encodeit">
<h:selectOneRadio id="coderType"
required="true"
value="#{coderBean.coderType}">
<f:selectItem
itemValue="1"
itemLabel="Test"/>
<f:selectItem
itemValue="2"
itemLabel="Shift Letters"/>
</h:selectOneRadio>
...
You can use either NetBeans IDE or Maven to build, package, deploy, and
run the producermethods
application.
The following topics are addressed here:
Make sure that GlassFish Server has been started (see Starting and Stopping GlassFish Server).
From the File menu, choose Open Project.
In the Open Project dialog box, navigate to:
tut-install/examples/cdi
Select the producermethods
folder.
Click Open Project.
In the Projects tab, right-click the producermethods
project and
select Build.
This command builds and packages the application into a WAR file,
producermethods.war
, located in the target
directory, and then
deploys it to GlassFish Server.
Make sure that GlassFish Server has been started (see Starting and Stopping GlassFish Server).
In a terminal window, go to:
tut-install/examples/cdi/producermethods/
Enter the following command to deploy the application:
mvn install
This command builds and packages the application into a WAR file,
producermethods.war
, located in the target
directory, and then
deploys it to GlassFish Server.
In a web browser, enter the following URL:
http://localhost:8080/producermethods
On the String Encoder page, select either the Test or Shift Letters option, enter a string and the number of letters to shift by, and then click Encode.
Depending on your selection, the Result line displays either the encoded string or the input values you specified.
Previous | Next | Contents |