JBoss Developer Studio is a set of eclipse-based development tools that are pre-configured for JBoss Enterprise Middleware Platforms and Red Hat Enterprise Linux. Developers are not required to use JBoss Developer Studio to develop on JBoss Enterprise Middleware and/or Red Hat Linux. But, many find these pre-configured tools offer significant time-savings and value, making them more productive and speeding time to deployment.
You must have a working installation of JDK 1.5 before you install JBoss Developer Studio. Currently it will only fully work with a 32-bit JVM, not a 64-bit JVM. On a 64-bit JVM the visual editor fails to launch. Thus in this guide we will show you how to install a 32-bit Sun JDK 5.0 on a Linux Platform and Microsoft Windows Platform.
Download the Sun JDK 5.0 (Java 2 Development Kit) from Sun's website. Choose "JDK 5.0 Update <x>" (where "x" is the latest update number) for download and then select "RPM in self-extracting" file for Linux. Read the instructions on Sun's website for installing the JDK.
If you don't want to use SysV service scripts you can install the "self-extracting file" for Linux instead of choosing the "RPM in self-extracting" file. In that case you can skip the next step mentioned here. But it is recommended to use the SysV service scripts for production servers.
Download and install the appropriate -compat RPM from JPackage here. Please ensure you choose a matching version of the -compat package to the JDK you've installed.
Create an environment variable that points to the JDK installation directory and call it JAVA_HOME. Add $JAVA_HOME/bin to the system path to be able to run java from the command line. You can do this by adding the following lines to the .bashrc file in your home directory.
#In this example /usr/java/jdk1.5.0_11 is the JDK installation directory. export JAVA_HOME=/usr/java/jdk1.5.0_11 export PATH=$PATH:$JAVA_HOME/bin
When you add $JAVA_HOME/bin to $PATH, you should add it before the old $PATH not after it. This way, the machine will pick up the new JVM first. You only need to run "alternative" as a safe guard for the right JVM.
Set this variable for your account doing the installation and also for the user account that will run the server.
If you have more than one version of JVM installed on your machine, make sure you are using the JDK 1.5 installation as the default java and javac. You can do this using the alternatives system. The alternatives system allows different versions of Java from different sources to co-exist on your system.
As a root user, type the following command at the shell prompt and you should see something like this:
[root@vsr ~]$ /usr/sbin/alternatives --config java There are 2 programs that provide 'java'. Selection Command ----------------------------------------------- 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java *+ 2 /usr/lib/jvm/jre-1.5.0-sun/bin/java Enter to keep the current selection[+], or type selection number:
Make sure the Sun version [jre-1.5.0-sun in this case] is selected (marked with a '+' in the output), or select it by entering its number as prompted.
Repeat the same for javac and java_sdk_1.5.0.
[root@vsr ~]$ /usr/sbin/alternatives --config javac There is 1 program that provides 'javac'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/java-1.5.0-sun/bin/javac Enter to keep the current selection[+], or type selection number: [root@vsr ~]$ /usr/sbin/alternatives --config java_sdk_1.5.0 There is 1 program that provide 'java_sdk_1.5.0'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/java-1.5.0-sun Enter to keep the current selection[+], or type selection number:
You should verify that java, javac and java_sdk_1.5.0 all point to the same manufacturer and version.
You can always override this step by setting the JAVA_HOME environment variable as explained in the previous step.
Make sure that the java executable is in your path and that you are using an appropriate version. To verify your Java environment, type "java -version" at the shell prompt and you should see something like this:
[root@vsr ~]$ java -version java version "1.5.0_11" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03) Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)
Download the Sun JDK 5.0 (Java 2 Development Kit) from Sun's website. Choose "JDK 5.0 Update <x>" (where "x" is the latest update number) for download and then select your Windows Platform options to perform the installation.
Create an environment variable called JAVA_HOME that points to the JDK installation directory, for example:
C:\Program Files\Java\jdk1.5.0_11\
In order to run java from the command line, add the jre\bin directory to your path, for example:
C:\Program Files\Java\jdk1.5.0_11\jre\bin
To do this, open the Control Panel from the Start Menu, switch to Classic View if necessary, open the System Control Panel applet (System), select the Advanced Tab, and click on the Environment Variables button.
JBDS comes with a simple installer, bundled with tested/pre-configured versions of Eclipse, Webtools, JBossEAP, Seam, and SpringIDE.
Download the appropriate installation file for your platform from Red Hat website.
Run in console:
java -jar jbdevstudio-linux-gtk-1.0.0.GA.jar
Follow the instructions presented by the installation wizard
Provide the installation path
Select Java VM
Selecting Default Java VM you set default Java VM of your system (to verify your Java environment, type "java -version" in console).
Selecting Specific Java VM you can provide the path to non-default Java VM.
JBoss Developer Studio needs Java 5 and doesn't work with gij Java.
Installation process includes JBoss Enterprise Application Platform. Select Yes to use it in JBoss Developer Studio.
The installer installs JBoss Enterprise Application Platform for running your applications if you select this option during the installation process. If you want to use a different server than ours, you can change the setting in JBoss Developer Studio.
Check your installation paths and see the components will be installed. Click Next to start installation.
JBoss Tools is an umbrella project for the JBoss developed plugins that will make it into JBoss Developer Studio. The JBoss Tools modules are:
JBoss AS Tools
Seam Tools
Hibernate Tools
Visual Page Editor
JST Tools
JBPM Tools
To install the JBoss Tools plugins for Eclipse, you need the following:
Get Eclipse 3.3.1 and Web Tools 2.0.1
The quickest way to get a WTP version is to download "Eclipse IDE for Java EE Developers" via www.eclipse.org.
Remember to choose the download that matches your OS and use Java 5 when you run it.
Get the JBoss Tools build
Finally, install the build
Unzip the file(s) directly into your Eclipse plugins/features directory and it will be readily available. It might be necessary to start Eclipse with eclipse -clean to make sure it starts clean and rereads the new list of plugins.
The welcome page is the first page you see when you first launch JBoss Developer Studio.
With the help of its page you will be able:
to get quick access to Getting Started Documentation (guides, tutorials and viewlets)
to create new Seam, jBPM Process, JSF or Struts projects using JBDS wizards
to get short description of perspectives that JBDS offers for more productive development
to visit JBoss Developer Studio web resources.
Start work with JBoss Developer Studio by clicking on Workbench button or simply close the welcome page.
If you have comments or questions, you can discuss them at our JBoss Developer Studio Forum.
When writing to the forum for questions, please include the following information:
JBoss Developer Studio version
Exact error message
Steps to reproduce the issue
For easy reference to JBoss Developer Studio related questions, our FAQ provides answers to our most "popular" questions. The sections of questions are organized by type.
Visual Editor does not start under Linux
Linux users may need to do the following to get the visual editor to work correctly on their machines.
ln -s libstdc++.so.5.0.7 libstdc++.so.5yum install libXpeclipse -debugDo I need to have JBoss server installed to run JBoss Developer Studio?
No. JBoss Developer Studio already comes bundled with JBoss server. We bundle it together so that you don't need to download any additional software and can test your application in a Web browser right away.
If you want to use a different JBoss server installation, after JBoss Developer Studio is installed open Servers View (select Window > Show View > Others > Server > Servers), then right click on this view > New > Server and follow the wizards steps to point to another Jboss server installation.
JBoss Developer Studio works with any servlet container, not just JBoss. For more information on deployment, please see the Deploying Your Application section.
I have an existing Struts or JSF project. Can I open the project in JBDS?
Yes. From main menu select File > Import > Other > JSF Project (or Struts Project) and follow wizards steps.
Can I import a .war file?
Yes. Select File > Import > Web > WAR file, then follow importing steps.
Is it possible to increase the performance of Eclipse after installing your product? My Eclipse now crawls.
JBoss Developer Studio preconfigures eclipse via the eclipse.ini file to allocate extra memory, but if you for some reason need more memory then by default, you can manually make adjustments in this file. For example:
-vmargs -Xms128m -Xmx512m -XX:MaxPermSize=128m
How can I add my own tag library to the JBoss Tools Palette?
See Adding Tag Libraries in JBossJSFTools Guide.
I see the Oracle ADF Faces component library tags in the JBoss Tools Palette, but I can't seem to find the libraries for ADF. How do I use this component library with JBDS?
See Adding Support for the Oracle ADF Components Library in the JBDS User Guide.
JBoss Developer Studio ships with JBoss EAP v.4.2 bundled. When you followed the default installation of JBoss Developer Studio, you should already have a JBoss 4.2 server installed and defined. To run JBoss AS 4.2 you need JDK 1.5, JDK 6 is not formally supported yet, although you may be able to start the server with it.
Starting JBoss server is quite simple. JBoss Developer Studio allows you to control its behaviour with the help of a special toolbar: where you could start it in a regular or debug mode, stop it or restart it.
To launch the server click the green-with-white-arrow icon on the JBoss Server View or right click server name in this view and select Start. If this view is not open, select Window > Show View > Other > Server > JBoss Server View
While launching, server output is written to the Console view:
When the server is started you should see Started right to its name in JBoss Server View (column "Status").
To see event log after the server is started, expand Event Log branch beneath JBoss Server View:
To stop the server, click the Stop icon in JBoss Server View or right click the server name and press Stop.
When the server is stopped you will see Stopped next to its name in the Status column.
You can control how JBoss Developer Studio interacts with servlet containers in Preferences. Select Window > Preferences > JBoss Tools > JBoss Servers and switch to the desired server:
Also you can double click the server name in JBoss Server View and open an overview of the server. Here you can specify some common settings: host name, server name, runtime and so on.
Although JBoss Developer Studio works closely with JBoss EAP 4.2 we do not ultimately tie you to any particular server for deployment. There are some servers that Studio supports directly (via the bundled Eclipse WTP plug-ins). In this section we discuss how to manage self-installed JBoss AS. Suppose you want to deploy the application to JBoss 4.2.1 server. First of all you need to install it.
Download the binary package of JBoss 4.2.1 and save it on your computer: http://labs.jboss.com/jbossas/downloads
It does not matter where on your system you install JBoss server.
The installation of JBoss server into a directory that has a name containing spaces provokes problems in some situations with Sun-based VMs. Try to avoid using installation folders that have spaces in their names.
There is no requirement for root access to run JBoss Server on UNIX/Linux systems because none of the default ports are within the 0-1023 privileged port range.
After you have the binary archive you want to install, use the JDK jar tool (or any other ZIP extraction tool) to extract the jboss-4.2.1.zip archive contents into a location of your choice. The jboss-4.2.1.tgz archive is a gzipped tar file that requires a gnutar compatible tar which can handle the long pathnames in the archive. The extraction process will create a jboss-4.2.1 directory.
Now we should add just installed server into server manager in JBoss Developer Studio.
Open the JBoss Server View by selecting Window > Show View > Other > Server > JBoss Server View. You will see JBoss Server view.
Right click anywhere in this view and select New Server.
Select JBoss, a division of Red Hat > JBoss v4.2 and click the Installed Runtimes button to select a new installed runtime.
Click Add button to add a new jboss runtime.
Select JBoss, a division of Red Hat > JBoss v4.2 and press Next.
In the next step make JBoss Developer Studio to know where you have installed the server and define JRE.
When adding a new server you will need to specify what JRE to use. It is important to set this value to a full JDK, not JRE. Again, you need a full JDK to run Web applications, JRE will not be enough.
In the following window leave all settings default or give your name to a new jboss server and press Finish.
A new runtime will now appear in the Preferences > Server > Installed Runtimes dialog.
Click OK. Then select a new added runtime in Server runtime drop down list and click Next button twice.
In the next dialog verify a JBoss runtime information and if something is unfair go back and correct it.
In the last wizard's dialog modify the projects that are configured on the server and click Finish.
A new JBoss server should now appear in JBoss Server View.
The JBoss Developer Studio provides sophisticated tools for enterprise applications. With the JBoss Developer Studio, you can get started very quickly with a web prototype, and then scale up your application to include enterprise features (e.g., business processes, web services, etc.) using the same developer tools. It is a "scalable" RAD (Rapid Application Development) tool.
A core element that makes the JBoss Developer Studio "scalable" is the JBoss Seam framework.
In this chapter, we will cover how to build a simple Seam web application in minutes with the JBoss Developer Studio.
To create a new web application in Seam, select New > Project ... > Seam > Seam Web Project. You will be prompted to enter a name and a location directory for your new project. The wizard has an option for selecting the actual Server (and not just WTP runtime) that will be used for the project. This allow the wizard to correctly identify where the needed datasource and driver libraries need to go.
Next, you will be asked to select the "features" you want to use in your project. This allows JBoss Developer Studio to setup the appropriate tooling for your project. Since JBoss Seam integrates all popular Java EE frameworks, you can select any combination of technologies from the list. Here, for this project, we will select Dynamic Web Module, Java, JavaServer Faces (JSF), and Seam Facet for a typical database-driven web application.
In this screen you can also bring up server runtimes panel by clicking Show Runtimes in the bottom right corner. This panel shows available server runtimes. Then this button will be changed into Hide Runtimes one.
Click Next to proceed further.
A dynamic web application contains both web pages and Java code. The wizard will ask you where you want to put those files. You can just leave the default values.
In the next screen, you will be able to select where those library JARs come from. The easiest is just to select the JARs provided by the JBoss AS runtime associated with this project. That is why it is important to chose the right JBoss AS 4.2 runtime in the project setup window.
Check Server Supplied JSF Implementation. We will use JSF implementation that comes with JBoss server
Click Next
We will also use a default Hibernate Dialect - org.hibernate.dialect.HSQLDialect and deploy as a war archive.
The project setup wizard also asks you to configure how Seam generates code for the project. The Seam Home Folder should point to a valid Seam distribution. By default, it is set to the Seam distribution bundled in your JBoss Developer Studio tool. If you need another one choose setting up the appropriate check box:
If in this list there is no Seam runtime you want to use add it through Window > Preferences > JBoss Tools > Web > Seam or just click Add button near the Seam Runtime list:
For the deployment format, choose WAR deployment if you want to use POJOs for UI event handling and business logic; choose EAR deployment if you want to EJB3 beans for added features. In most web applications, the WAR deployment option would suffice. You should also enter Java packages for the entity beans (for database mapping) and session beans (for action handlers). All generated code will be placed in those packages.
Click on Finish to generate a project. The generated project contains all the necessary library JARs, XML configuration files, the ANT build script, as well as simple XHTML web pages and Java classes for the skeleton web application. The project will be shown in Project Explorer as well as in Seam Components view. If Seam Components view is not open select Window > Show View > Seam Components.
You can hide unused Seam components from this view.
Click the button Menu on the top of the view (down-pointing arrow)
Choose Customize View..
In the dialog Available Customization check the filter you want to apply under the Filters tab
Once the application is generated, you can use the "Run on server" menu to build and deploy it into the JBoss AS runtime associated with the project. All you need is to start JBoss AS in the server manager, and load the browser at URL http://localhost:8080/MySeamProj/. You should see the following web page.
To make simple changes to the page, you just need to double click on the WebContent/home.xhtml file and edit it in the visual editor. Notice that the visual editor lets you both the XHTML code and the rendered page. The rendered view is designed to make it easy to find stuff in a complex XHTML page.
Once you finished editing, save the file (File > Save), and reload the browser to see the changes.
Notice that we do not need to re-build and re-deploy the application. Just save the edited page and reload the browser.
To add a new page and related UI action to the project, use the New > Other ... > Seam > Seam Form wizard. You are prompted to enter the name of the project and seam component name, all the others fields will be filled by the wizard.
The wizard generate a web page with a single text input field and an action button. Notice that the generated page uses layout/template.xhtml as a template. The template page provides the page header, footer, side menu, and CSS styles (see the template.xhtml for more details). The simpleAction.xhtml is assembled into the template when the simpleAction.seam URL is loaded.
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition> xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
template="layout/template.xhtml">
<ui:define name="body">
<h:messages globalOnly="true" styleClass="message"/>
<h:form id="simpleActionForm">
<rich:panel>
<f:facet name="header">simpleAction</f:facet>
<s:decorate id="valueDecoration" template="layout/edit.xhtml">
<ui:define name="label">Value</ui:define>
<h:inputText id="value" required="true"
value="#{simpleAction.value}"/>
</s:decorate>
<div style="clear:both"/>
</rich:panel>
<div class="actionButtons">
<h:commandButton id="simpleAction" value="simpleAction"
action="#{simpleAction.simpleAction}"/>
</div>
</h:form>
</ui:define>
</ui:composition>
The #{simpleAction.value} notation on the web page maps to the "value" property in the backend component named "simpleAction", and the #{simpleAction.simpleAction} notation indicates that the simpleAction() method is called when the button is clicked on. Here is the "simpleAction" named backend Seam component generated by the wizard.
package org.domain.MySeamProj.session;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.core.FacesMessages;
import org.hibernate.validator.Length;
@Name("simpleAction")
public class SimpleAction {
@Logger private Log log;
@In
FacesMessages facesMessages;
private String value;
//seam-gen method
public void simpleAction()
{
//implement your business logic here
log.info("simpleAction.simpleAction() action called with: #{simpleAction.value}");
facesMessages.add("simpleAction #{simpleAction.value}");
}
//add additional action methods
@Length(max=10)
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
Load the Simplepage.seam in the web browser. Type something in the text field and click on the "simpleAction" button. A JSF message containing the input string is created by the simpleAction.simpleAction() method. The message is displayed on the page via the <h:message> tag.
Notice that in the generated SimpleAction class, there is a @Length annotation to validate the input when the input string is bound to #{simpleAction.value}. To see how this works, enter a text string longer than 10 chars and click on the button. This is what you should see.
Seam supports many different input validation annotations. To see an example, you can replace the @Length(max=10) annotation with the following. It would require the input string to have a first name and last name separated by a space. If the validation fails, the web page would print the customized error message.
@NotNull
@Pattern(regex="^[a-zA-Z.-]+ [a-zA-Z.-]+",
message="Need a firstname and a lastname")
public String getValue()
{
return value;
}
Save the Java file, deploy the application, and reload the browser to see the new validation scheme in action.
Now, let's add a little more logic to the application. We will add a new boolean property to the action component. If it is set to true, the action would capitalize the input string and display it on the web page. The following code in the SimpleAction class implements the logic.
@Name("simpleAction")
public class SimpleAction {
private boolean convertToCap;
public boolean getConvertToCap () { return convertToCap; }
public void setConvertToCap (boolean b) { convertToCap = b; }
public String hello()
{
if (convertToCap) {
value = value.toUpperCase ();
}
return null;
}
... ...
}
Next, on the web page, add the following line to display the value property on the simpleAction component. Notice that code completion is supported for the JSF EL expression.
<p><b>Hello, #{simpleAction.value}</b></p>
Finally, on the web page, we add a boolean selection box component. It is bound to the convertToCap property on the backend component.
<h:selectBooleanCheckbox title="convertToCap"
value="#{simpleAction.convertToCap}" />
Capitalize the input?
Deploy the application and see it in action now.
You have probably noticed that the web page template has a login link at the top of the page. You can use the Seam security framework to secure access to any web page or web action. You can implement the login logic in the checkLoggedIn method. In the following example, we just use hardcoded username and password. But you can easily change it to use database, LDAP or any other means.
Then, on the action method, you can use the @AroundInvoke annotation to specify that it is only invoked by authenticated users.
public class LoggedInInterceptor
{
@AroundInvoke
public Object checkLoggedIn(InvocationContext invocation) throws Exception
{
boolean isLoggedIn = Contexts.getSessionContext().get("loggedIn")!=null;
if (isLoggedIn) {
//the user is already logged in
return invocation.proceed();
}
else {
//the user is not logged in, fwd to login page
return "login";
}
}
}
Now, re-deploy the application and try the action button. The application redirects to the login page asking for login credentials. The method is invoked after you successfully logged in.
We can also secure web pages. You can edit the Authenticator.java file to put an access constraint on the login page.
package.org.domain.MySeamProj.session;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
import org.jboss.seam.security.identity;
@Name ("authenticator")
public class Authenticator
{
@Logger Log log;
@In Identity identity;
public boolean authenticate()
{
log.info("authenticating #0", identity.getUserName());
//write your authentication logic here,
//return true if the authentication was
//successful, false otherwise
identity.addRole("admin");
return true;
}
}
You can try to load the http://localhost:8080/MySeamProj/ URL in the browser and it will redirect to ask for login.
Seam on JBoss: Seam Framework
Ten Good Reasons to use Seam: Why Seam
Getting Started: Getting Started with JBoss Seam
Wiki: JBoss Wiki
FAQ: JBoss Seam FAQ
Downloads: JBoss Seam Downloads
Jira: Jira issue tracker
Rules Framework: JBoss Rules
Seam Tools - New and Noteworthy: What's new and noteworthy
In this chapter you'll find out how to create a simple JSP application using the JBoss Developer Studio. The application will show a classic "Hello World!" on the page.
We'll assume that you have already launched JBoss Developer Studio and also that the Web Development perspective is the current perspective. (If not, make it active by selecting Window > Open Perspective > Web Development from the menu bar or by selecting Window > Open Perspective > Other... from the menu bar and then selecting Web Development from the Select Perspective dialog box.)
At first a new project for the application will be created.
Go to the menu bar and select File > New > Project...
Select Web > Dynamic Web Project in the New Project dialog box
Click Next
Enter "jspHello" as a project name
Leave everything else as is, and click Finish
A jspHello node should appear in the upper-left Package Explorer view.
In our simple application we need to create only one JSP page which displays a "Hello World!" message.
Right click WebContent > New > JSP.
Type "hello.jsp" for a file name and click the Next button.
In the next window you can choose a template for your jsp page and see its preview.
Select New JSP File (xhtml) template and click Finish button.
Our hello.jsp page will now appear in Project Explorer.
Let's now make a little change so that a jsp page displays "Hello World!" message.
Insert this line inside the <body></body> tag:
<% System.out.println("Hello World!"); %>
Notice that content assist functionality is always available when you are typing:
After changes made your hello.jsp page should look like this:
When you are creating web project the wizard creates the web.xml for you automatically. The web.xml file editor provided by JBoss Developer Studio is available in two modes: design and source.
Both modes are fully synchronized. Let's add mapping to our hello.jsp page in web.xml file.
Switch to source mode.
Add the next code into <welcome-file-list>:
<welcome-file>hello.jsp</welcome-file>
If you come back to design mode you will see that the changes made are automatically reflected in that mode.
Actually you don't really need any config right now. You can clear the web.xml file, save it and you'll still be able to launch your application.
While creating any web project you could experience a pain writing ant scripts and managing the packaging even if a developer is writing the most trivial web applications. With JBoss Developer Studio you are saved from such a pain. All you need is to start JBoss server and launch your application in your favorite browser.
You can also create a war archive with JBDS's Archive Tools and export it to any web server.
Project archives managing is available through Project archives view.
Select Window > Show view > Other > JBoss Tools > Project archives from menu bar
Select a project in Package Explorer you want to be archived
In Project Archives you will see available archive types for the project:
Click, for example, WAR option to create war archive
In the dialog New WAR you can see automatically selected default values
Click Next to see a stub archive configuration for your project:
Click Finish. The .war file will appear in Package Explorer and in Project archives view as structure tree:
Via Project archives view you could now edit your archive, add new folders, publish to server, and so on:
When you are creating a web application and register it on JBoss server it is automatically deployed into /deploy directory of the server. JBDS comes with the feature of auto-redeploy. It means that you don't need to restart JBoss. Any changes made in the application in exploded format will trigger a redeployment on the server.
JBDS comes with JSP design-time preview features. When designing JSP pages you can easily preview how they will look during runtime. You can even attach your stylesheet to the preview.
Make a little change to hello.jsp page, e.g. put this code snippet:
<%= new java.util.Date() %>
Click Save button.
Switch to Preview page by clicking Preview tab at the bottom of the page. You will see how the page will look at runtime.
Let's now launch our project on server. We'll use JBoss server that is shipped with JBoss Developer Studio.
Start JBoss server from JBoss Server view by clicking the Start icon.
Click the Run icon or right click your project folder and select Run As > Run on Server. If you haven't made any changes in web.xml file or cleared it out you can launch the application by right clicking the hello.jsp page and selecting Run on the Server.
You should see the next page in a browser :
In this chapter you will see how to create a simple JSF application being based on "RAD" philosophy. We will create the familiar Guess Number application. The scenario is the following. You are asked to guess a number between 0 and 100. If the guess is correct, a success page is displayed with a link to play again. If the guess is incorrect, a message is printed notifying the user that a smaller or a larger number should be entered and the game continues.
We'll show you how to create such an application from scratch, along the way demonstrating powerful features of JBoss Developer Studio such as project templating, Visual Page Editor, code completion and others. You will design the JSF application and then run the application from inside JBoss Developer Studio using the bundled JBoss server.
We will create a JSF 1.2 project using an integrated JBDS's new project wizard and predefined templates.
In Web Projects View (if it is not open select Window > Show View > Others > JBoss Tools Web > Web Projects View) click Create New JSF Project button.
Put GuessNumber as a project name, in JSF Environment drop down list choose JSF 1.2.
Leave everything else as it is and click Finish
Our project will appear in Project Explorer and Web Projects Views. As you can see Red Had Developer Studio has created for us the whole skeleton for the project with all needed libraries, faces-config.xml and web.xml files.
The application has two pages. The first page is inputnumber.jsp. It prompts you to enter a number. If the guess is incorrect, the same page will be redisplayed with a message indicating whether a smaller or a larger number should be tried. The second page is success.jsp. This page will be shown after you guess the number correctly. From this page you also have the option to play the game again.
On the first page inputnumber.jsp you will enter a number.
Open faces-config.xml file
Right click anywhere on the diagram mode
From the context menu select New View
Type pages/inputnumber as the value for From-view-id
Leave everything else as is and click Finish
In the same way create another jsf view. Type pages/success as the value for From-view-id
Select File > Save
On the diagram you will see two created views.
We should now create connection between jsp pages.
In the diagram, select the Create New Connection icon third from the top along the upper left side of the diagram to get an arrow cursor with a two-pronged plug at the arrow's bottom
Click on the pages/inputnumber page icon and then click on the pages/success page icon
A transition should appear between the two icons of views.
Select File > Save from the menu bar
JBoss Developer Studio allows to create quickly a resource file. Using this feature you can collect text messages in one central place. A resource file is just a file with a .properties extension. The messages stored in resource file can be displayed to you on a Web page during application execution.
With resource file first, you don't hard code anything into the JSP pages. And second, it makes it easier to translate your application to other languages. All you have to do is to translate all your messages to the other language and save them in a new properties file with a name that ends with the appropriate ISO-639 language code.
It is a good idea to keep your resources inside the JavaSource folder, where you keep your .java files. Every time you build the project, all .properties files will then be copied to the classes folder by default.
Right click JavaSource folder and select New > Folder
Type game for Folder name and click Finish
We will store in this folder our resource file and java bean.
Right click on game folder and select New > Properties File
Type messages as the value for "name" attribute and click Finish
JBoss Developer Studio will automatically open messages.properties file for editing.
Click Add button
Type how_to_play for "name" and Please pick a number between 0 and 100. for value
Click Finish
In such a way add the next properties:
makeguess_button=Make Guess
trayagain_button=Play Again?
success_text=How cool.. You have guessed the number, {0} is correct!
tryagain_smaller=Oops..incorrect guess. Please try a smaller number.
tryagain_bigger=Oops..incorrect guess. Please try a bigger number.
Click File > Save from the menu bar
Your .properties file should now look like follows:
Now we create a Java bean that will hold business logic of our application.
Right click game folder
Select New > Class
Type NumberBean for bean name
A java bean is created.
Declare the variable of your entered number:
Integer userNumber;JBDS allows to quickly generate getters and setters for java bean.
Right click NumberBean.java in Package Explorer
Select Source > Generate Getters and Setters...
Check userNumber box and click OK
Add the declaration of the second variable
int randomNumber;
.. other bean methods:
public NumberBean ()
{
randomNumber = (int)(Math.random()*100);
System.out.println ( "Random number: "+randomNumber);
}
public String playagain ()
{
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.invalidate();
return "playagain";
}
public String checkGuess ()
{
// if guessed, return 'success' for navigation
if ( userNumber.intValue() == randomNumber )
{
return "success";
}
else
{
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = ResourceBundle.getBundle("game.messages", context.getViewRoot().getLocale());
String msg = "";
// if number bigger, get appropriate message
if ( userNumber.intValue() > randomNumber )
msg = bundle.getString("tryagain_smaller");
else // if number smaller, get appropriate message
msg = bundle.getString("tryagain_bigger");
// add message to be displayed on the page via <h:messages> tag
context.addMessage (null, new FacesMessage(msg));
// return 'tryagain' for navigation
return "tryagain";
}
}
And the import declarations:
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import javax.faces.application.FacesMessage;
import java.util.Locale;
import java.util.ResourceBundle;
The whole java bean should look as follows:
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import javax.faces.application.FacesMessage;
import java.util.Locale;
import java.util.ResourceBundle;
public class NumberBean
{
Integer userNumber;
int randomNumber; // random number generated by application
public Integer getUserNumber ()
{
return userNumber;
}
public void setUserNumber (Integer value)
{
this.userNumber = value;
}
// constructor, generates random number
public NumberBean ()
{
randomNumber = (int)(Math.random()*100);
System.out.println (
"Random number: " + randomNumber);
}
public String playagain ()
{
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.invalidate();
return "playagain";
}
// check if user guessed the number
public String checkGuess ()
{
// if guessed, return 'success' for navigation
if ( userNumber.intValue() == randomNumber )
{
return "success";
}
// incorrect guess
else
{
// get a reference to properties file to retrieve messages
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = ResourceBundle.getBundle("game.messages", context.getViewRoot()