Apache MyFaces Examples

Examples provided by the myfaces-example-simple-1.1.6.war file provides the code for every example. Downloading and deploying this war file in the Tomcat6.0 server has been described in the previous tutorial Downloading and exploring MyFaces examples inte

Apache MyFaces Examples

Apache MyFaces Examples

        

Examples provided by the myfaces-example-simple-1.1.6.war file provides the code for every example. Downloading and deploying this war file in the Tomcat6.0 server has been described in the previous tutorial Downloading and exploring MyFaces examples integrated with Tomahawk. Just go to webapps\myfaces directory of Tomcat server and open JSP file for the examples. In this tutorial, some examples have been explored to understand the usage of the tags and its attributes to create components like File Uploading, Calendar, Menu, Data Scrolling, Tabbed Pane and many more useful components. So let's go through some examples : 

Data Scroller Example:(dataScroller.jsp)
This example provides the feature of displaying certain amount of table data at a time and scrolling the next data of the table. You can see how to code for this functionality. You can create table using <t:dataTable> tag and for scrolling use <t:dataScroller> tag. This tag provides an attribute "for" in which we have to mention the "id" of the table for which the scrolling is to be performed. 

 

 

 

 

 

Code for creating table :

<t:dataTable id="data"
styleClass="scrollerTable"
headerClass="standardTable_Header"
footerClass="standardTable_Header"
rowClasses="standardTable_Row1,standardTable_Row2"
columnClasses="standardTable_Column,standardTable_ColumnCentered,standardTable_Column"
var="car"
value="#{scrollerList.list}"
preserveDataModel="false"
rows="10"
>
<h:column>
<f:facet name="header">
</f:facet>
<h:outputText value="#{car.id}" />
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="#{example_messages['label_cars']}" />
</f:facet>
<h:outputText value="#{car.type}" />
</h:column>

<h:column>
<f:facet name="header">
<h:outputText value="#{example_messages['label_color']}" />
</f:facet>
<h:outputText value="#{car.color}" />
</h:column>

</t:dataTable>

Code for scrolling the data of the table above :

<t:dataScroller id="scroll_1"
  for="data"
  fastStep="10"

  pageCountVar="pageCount"
  pageIndexVar="pageIndex"
  styleClass="scroller"
  paginator="true"
  paginatorMaxPages="9"
  paginatorTableClass="paginator"
  paginatorActiveColumnStyle="font-weight:bold;"
  immediate="true"
  actionListener="#{scrollerList.scrollerAction}"
>
<f:facet name="first" >
   <t:graphicImage url="images/arrow-first.gif" border="1" />
</f:facet>
<f:facet name="last">
   <t:graphicImage url="images/arrow-last.gif" border="1" />
</f:facet>
<f:facet name="previous">
   <t:graphicImage url="images/arrow-previous.gif" border="1" />
</f:facet>
<f:facet name="next">
   <t:graphicImage url="images/arrow-next.gif" border="1" />
</f:facet>
<f:facet name="fastforward">
   <t:graphicImage url="images/arrow-ff.gif" border="1" />
</f:facet>
<f:facet name="fastrewind">
   <t:graphicImage url="images/arrow-fr.gif" border="1" />
</f:facet>
</t:dataScroller>

This tag provides attribute fastStep to specify the number of rows to be displayed at a time. As in this example, this attribute has been set to "10" so 10 rows are displayed at a time. paginatorMaxPages has been set to "10" so there are 10 integer numbers displayed. The number on which we click, the data corresponding to that page is opened. We can see this in the figure below :

Tabbed Pane Example:(tabbedPane.jsp)
This example explains creating tabbed Pane. You can create tabbed pane using <t:panelTabbedPane> tag. This tag provides a boolean attribute "serverSideTabSwitch" which is used to declare the component as client side or server side component. If it is set to "true" then it is treated as server side component and if "false" then client side. <t:panelTab> tag is used to create tabs. The content that is to be displayed in the tab is coded with in this tag. The code before first <t:panelTab> tag is displayed in all the tabs in the beginning and the code after the last <t:panelTab> tag is also displayed at the bottom of all the tabs.

<t:panelTabbedPane bgcolor="#FFFFCC" serverSideTabSwitch="false">

<f:verbatim><p></f:verbatim>
<h:outputText value="#{example_messages['tabbed_common']}"/>
<f:verbatim></p></f:verbatim>

<t:panelTab id="tab1" label="#{example_messages['tabbed_tab1']}"
   rendered="#{tabbedPaneBean.tab1Visible}">
   <h:selectBooleanCheckbox id="testCheckBox"
   value="#{testCheckBox.checked}"/>
   <h:outputLabel for="testCheckBox" value="A checkbox"/>
   <f:verbatim><br/><br/></f:verbatim>
   <h:inputText id="inp1"/><f:verbatim><br></f:verbatim>
   <h:inputText id="inp2" required="true" /><h:message for="inp2"
   showSummary="false" showDetail="true" />
</t:panelTab>

<t:panelTab.................................................
............................................................
............................................................
</t:panelTab>

<t:panelTab.................................................
............................................................
............................................................
</t:panelTab>

<f:verbatim><br/><hr/><br/></f:verbatim>
<h:selectBooleanCheckbox value="#{tabbedPaneBean.tab1Visible}"/>
<h:outputText value="#{example_messages['tabbed_visible1']}"/>
<f:verbatim><br></f:verbatim>
<h:selectBooleanCheckbox value="#{tabbedPaneBean.tab2Visible}"/>
<h:outputText value="#{example_messages['tabbed_visible2']}" />
<f:verbatim><br></f:verbatim>
<h:selectBooleanCheckbox value="#{tabbedPaneBean.tab3Visible}"/>
<h:outputText value="#{example_messages['tabbed_visible3']}" />
<f:verbatim><br></f:verbatim>

<h:commandButton value="#{example_messages['tabbed_submit']}" />
<t:panelTabbedPane>

Three figures below shows the content of each tab. Just see "A common paragraph" string is displayed above for all the tabs and a horizontal line, three check boxes and a button labeled "Common submit button" is also displayed at the bottom for all the tabs. The rest content for the individual tabs depends on the code written within opening and closing <t:panelTab> tag.

  

File Upload Example:(fileupload.jsp)
File uploading is the concept of uploading the file to the server. The component for this purpose is created using <t:inputFileUpload> tag. Do remember to include "enctype" attribute in the form tag and set to "multipart/form-data". You must enable the MultiPart Filter to make the component work. For this you have to add the code below in the web.xml file.

<filter>
  <filter-name>extensionsFilter</filter-name>
  <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
  <init-param>
  <description>Set the size limit for uploaded files.
   Format: 10 - 10 bytes
  10k - 10 KB
  10m - 10 MB
  1g - 1 GB
  </description>
  <param-name>uploadMaxFileSize</param-name>
  <param-value>100m</param-value>
  </init-param>
  <init-param>
  <description>Set the threshold size - files below this limit are stored in
   memory, files above this limit are stored on disk.
   Format: 10 - 10 bytes
   10k - 10 KB
   10m - 10 MB
   1g - 1 GB
   </description>
   <param-name>uploadThresholdSize</param-name>
   <param-value>100k</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>extensionsFilter</filter-name>
   <url-pattern>*.jsf</url-pattern>
</filter-mapping>

<filter-mapping>
  <filter-name>extensionsFilter</filter-name>
  <url-pattern>/faces/*</url-pattern>
</filter-mapping>

 To create file upload component we can use <t:inputFileUpload > tag.

<h:form id="form1" enctype="multipart/form-data" >
.....................
....................
<t:inputFileUpload id="fileupload"
accept="image/*"
value="#{fileUploadForm.upFile}"
storage="file"
styleClass="fileUploadInput"
required="true"
maxlength="200000"/>
.....................
....................
</h:form>

The figure given below displays the uploading of the file :

 

Calendar Example: (calendar.jsp)
This example creates calendar using <t:inputCalendar>.

<t:inputCalendar id="secondOne"
   monthYearRowClass="yearMonthHeader"
   weekRowClass="weekHeader" 
   popupButtonStyleClass="standard_bold"
   currentDayCellClass="currentDayCell" 
   value="#{calendarBean.secondDate}" 
   renderAsPopup="true"
   popupTodayString="#{example_messages['popup_today_string']}"
   popupDateFormat="MM/dd/yyyy"
   popupWeekString="#{example_messages['popup_week_string']}"
   helpText="MM/DD/YYYY"
   forceId="true"/>

 In this if we set renderAsPopup attribute to "true" then it displays the calendar as a Java Script popup on client. We can see this type of calendar in the figure below :

The date format displayed on the client side, when date is selected in the calendar, is specified by the popupDateFormat tag. popupTodayString tag is used to set the string for "Today is ". If we set this attribute to "The date today is :" then "The date today is :" will be displayed instead of "Today is ". popupWeekString tag is used to set the string for "Wk". If we set this attribute to "week" then "week" is displayed instead of "Wk". helpText attribute is used to set the string that will be displayed to help the user to get the correct format of date to enter in the field.

Menu Example:(jscookmenu.jsp)
jscookMenu
tag is used to create Menu component. navigationMenuItem (s) nested within  jscookMenu tag are rendered as Java Script Menu. The label for the menu item is set by the attribute itemLabel of navigationMenuItem tag. If we want to split the item into sub-items then split attribute of navigationMenuItem tag is set to "true". The code to understand these facts is given below :

<t:jscookMenu layout="hbr" theme="ThemeOffice"
   styleLocation="css/jscookmenu">

<t:navigationMenuItems id="nav_0"
  value="#{navigationMenu.JSCookMenuNavigationItems}" />
<t:navigationMenuItem id="nav_1"
  actionListener="#{navigationMenu.actionListener}"
  itemLabel="#{example_messages['nav_Home']}"
  itemValue="go_home"
  action="go_home"/>

<t:navigationMenuItem id="nav_2"
  itemLabel="#{example_messages['nav_Examples']}">
   <t:navigationMenuItem id="nav_2_1"
   itemLabel="#{example_messages['nav_Sample_1']}" 
   action="go_sample1" />
   <t:navigationMenuItem split="true"></t:navigationMenuItem>
   <t:navigationMenuItem id="nav_2_2"
   itemLabel="#{example_messages['nav_Sample_2']}" 
   action="go_sample2"
   icon="images/myfaces.gif" />
   <t:navigationMenuItem id="nav_2_3"
  itemLabel="#{example_messages['nav_Validate']}"
  action="go_validate"
  icon="images/myfaces.gif" />
   <t:navigationMenuItem id="nav_2_4"

  itemLabel="#{example_messages['nav_Components']}"
  icon="images/component.gif" split="true">
  <t:navigationMenuItem id="nav_2_4_1"
   itemLabel="#{example_messages['nav_sortTable']}"
   action="go_sortTable" 
   icon="images/myfaces.gif" />
  <t:navigationMenuItem id="nav_2_4_2"
  itemLabel="#{example_messages['nav_Selectbox']}"
  action="go_selectbox" 
  icon="images/myfaces.gif" />
  <t:navigationMenuItem id="nav_2_4_3"
  itemLabel="#{example_messages['nav_FileUpload']}"
  action="go_fileupload" 
  icon="images/myfaces.gif" />
   ................................................
   ................................................
   ................................................
   <t:navigationMenuItem id="nav_2_4_14"
  itemLabel="#{example_messages['nav_newspaperTable']}"
  action="go_newspaperTable" 
  icon="images/myfaces.gif" />

   </t:navigationMenuItem>
</t:navigationMenuItem>
<t:navigationMenuItem id="nav_3"
   itemLabel="Apache MyFaces Home" 
   action="http://myfaces.apache.org" />
</t:jscookMenu>

The menu and its items for the example looks as below:

 

  0