<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>java-server-faces &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/java-server-faces/</link>
	<description>Feed of posts on WordPress.com tagged "java-server-faces"</description>
	<pubDate>Thu, 23 May 2013 02:25:38 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[extVal, JSF validator injection lebih keren dari Seam dan Spring]]></title>
<link>http://eecchhoo.wordpress.com/2009/03/19/extval-jsf-validator-injection-lebih-keren-dari-seam-dan-spring/</link>
<pubDate>Thu, 19 Mar 2009 07:49:19 +0000</pubDate>
<dc:creator>Eko Kurniawan Khannedy</dc:creator>
<guid>http://eecchhoo.wordpress.com/2009/03/19/extval-jsf-validator-injection-lebih-keren-dari-seam-dan-spring/</guid>
<description><![CDATA[tadi malem gw search tentang info-info terbaru seputar JSF. kenapa JSF, soalnya gw lebih tertarik am]]></description>
<content:encoded><![CDATA[tadi malem gw search tentang info-info terbaru seputar JSF. kenapa JSF, soalnya gw lebih tertarik am]]></content:encoded>
</item>
<item>
<title><![CDATA[Java desktop links of the week, March 2nd]]></title>
<link>http://thejusblogspot.wordpress.com/2009/03/02/java-desktop-links-of-the-week-march-2nd/</link>
<pubDate>Mon, 02 Mar 2009 02:39:36 +0000</pubDate>
<dc:creator>damuchinni</dc:creator>
<guid>http://thejusblogspot.wordpress.com/2009/03/02/java-desktop-links-of-the-week-march-2nd/</guid>
<description><![CDATA[Wow &#8211; it’s March already &#8211; where does time go? Here are the links from the last week tha]]></description>
<content:encoded><![CDATA[<p>Wow &#8211; it’s March already &#8211; where does time go? Here are the links from the last week that I think were important &#8211; as always, email/twitter/courier pigeon me any news that you think is relevant. Have a great week!<br />
Swing</p>
<p>    * As always, Alex Ruiz (@alexRuiz) has been busy, this week announcing the 1.1 release of FEST-Swing which is a Java library that provides a fluent interface for functional Swing GUI testing.<br />
    * Ken Orr has announced that he will be at JavaOne, presenting on the topic of component-oriented design. This will be an interesting talk, given the inheritance-oriented design that went into Swing, and the issues that has created, particularly in terms of method-overload.<br />
    * elliotth gave the Swing 2.0 counter-argument this week, suggesting that the point of Swing 2.0 is misguided and irrelevant. For the purposes of proper and full discourse, I appreciate his post, although I wish he had comments enabled so that a discussion could occur.</p>
<p>JavaFX</p>
<p>    * Michael Heinrichs has posted the third in his series of blog posts about best practices for JavaFX mobile. I never knew of this blog until now. The first post suggests to avoid unnecessary bindings, the second post suggests to keep the scenegraph as small as possible, and the third post has two tips: use simple shapes over images, and use small shapes over complex shapes.<br />
    * More demos have been developed to show off the ease of developing in JavaFX. JFXStudio has a simple ’sink a ship’ game, Sergey Malenkov has posted a demo that creates a fireworks display (which Kirill Grouchnikov (@kirillcool) recreated in his Trident animation framework), and Santiago Pericas-Geertsen has created a Space Invaders-esque game for JavaFX.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Tutorial: Creating JavaServer Faces JSF application in Eclipse]]></title>
<link>http://thejusblogspot.wordpress.com/2009/03/02/tutorial-creating-javaserver-faces-jsf-application-in-eclipse/</link>
<pubDate>Mon, 02 Mar 2009 02:25:57 +0000</pubDate>
<dc:creator>damuchinni</dc:creator>
<guid>http://thejusblogspot.wordpress.com/2009/03/02/tutorial-creating-javaserver-faces-jsf-application-in-eclipse/</guid>
<description><![CDATA[Let us see how to create a simple application using JavaServer Faces or JSF framework in Eclipse IDE]]></description>
<content:encoded><![CDATA[<p>Let us see how to create a simple application using JavaServer Faces or JSF framework in Eclipse IDE. First let us see what are the tools required to create our hello world JSF application.</p>
<p>   1. JDK 1.5 above (download)<br />
   2. Tomcat 5.x above or any other container (Glassfish, JBoss, Websphere, Weblogic etc) (download)<br />
   3. Eclipse 3.2.x above (download)<br />
   4. Sun Reference Implementation of JSF: (download). Following are the list of JAR files required for this application.<br />
          * jsf-impl.jar<br />
          * jsf-api.jar<br />
          * jstl.jar<br />
          * common-logging.jar<br />
          * common-beanutils.jar<br />
          * common-collections.jar<br />
          * common-chain.jar<br />
          * common-digester.jar</p>
<p>We will implement a JSF application with an Add User screen with two fields, ID and User Name. Once user enter these values and press submit, she will be redirected to a welcome page displaying the user name.</p>
<p>Let us start with our first JSF based web application.<br />
Step 1: Create Dynamic Web project</p>
<p>Open Eclipse and goto File -&#62; New -&#62; Project and select Dynamic Web Project in the New Project wizard screen.<br />
dynamic web project eclipse</p>
<p>Select Dynamic Web application and click Next.<br />
create dynamic web project jsf</p>
<p>Write the name of the project HelloWorldJSF. Once this is done, select the target runtime environment (e.g. Apache Tomcat v6.0). This is to run the project inside Eclipse environment. In configuration select JavaServer Faces v1.2 Project and press Next.</p>
<p>jsf-new-project</p>
<p>On Project Facets window, select Java 5 and JSF 1.2 and press Next.</p>
<p>Skip Web module window and press Next.</p>
<p>jsf-capabilities-face-servlet</p>
<p>Select JSF component library. Click New in Component Libraries and add jstl.jar, jsf-api.jar and jsf-impl.jar. In URL Mapping Patterns add /faces/* and then click Finish.</p>
<p>Once the project is created, you can see its structure in Project Explorer.<br />
jsf-project-explorer-view<br />
Step 2: Create Package and Managed bean</p>
<p>Create a package net.viralpatel.jsf.helloworld in the source folder and create a Java file UserBean.java. Copy following content into UserBean.java.<br />
view plaincopy to clipboardprint?</p>
<p>   1. package net.viralpatel.jsf.helloworld;<br />
   2.<br />
   3. public class UserBean {<br />
   4.     private int id;<br />
   5.     private String name;<br />
   6.<br />
   7.     //Action method to add user<br />
   8.     public String addUser() {<br />
   9.<br />
  10.         return &#8220;success&#8221;;<br />
  11.     }<br />
  12.     public int getId() {<br />
  13.         return id;<br />
  14.     }<br />
  15.     public void setId(int id) {<br />
  16.         this.id = id;<br />
  17.     }<br />
  18.     public String getName() {<br />
  19.         return name;<br />
  20.     }<br />
  21.     public void setName(String name) {<br />
  22.         this.name = name;<br />
  23.     }<br />
  24. }  </p>
<p>package net.viralpatel.jsf.helloworld;</p>
<p>public class UserBean {<br />
	private int id;<br />
	private String name;</p>
<p>	//Action method to add user<br />
	public String addUser() {</p>
<p>		return &#8220;success&#8221;;<br />
	}<br />
	public int getId() {<br />
		return id;<br />
	}<br />
	public void setId(int id) {<br />
		this.id = id;<br />
	}<br />
	public String getName() {<br />
		return name;<br />
	}<br />
	public void setName(String name) {<br />
		this.name = name;<br />
	}<br />
}</p>
<p>Above Java class is a User bean that we will use to store our user’s information. This class acts like a form bean and action class. The addUser() method will get called when we click Add button on our Add User page.<br />
Step 3: Create JSP files</p>
<p>Create two JSP files: AddUser.jsp and ListUser.jsp in WebContent folder. Copy following content in each of these files.<br />
AddUser.jsp</p>
<p>view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.<br />
   3.<br />
   4.<br />
   5.<br />
   6.     Add New User Form<br />
   7.<br />
   8.<br />
   9.<br />
  10.
<p>
  11.<br />
  12.         </p>
<p>  13.<br />
  14.<br />
  15.<br />
  16.<br />
  17.<br />
  18.<br />
  19.<br />
  20.<br />
  21.<br />
  23.<br />
  24.<br />
  25.<br />
  26.<br />
  27.   </p>
<p>	Add New User Form</p>
<p>We have added a validation rule for ID using f:validateLongRange tag and required=”true” attribute. The ID must be in between 1 and 500.<br />
ListUser.jsp<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.<br />
   3.<br />
   4.<br />
   5.<br />
   6.     List of Users<br />
   7.<br />
   8.<br />
   9.<br />
  10.<br />
  11.<br />
  12.<br />
  13.<br />
  14.<br />
  15.<br />
  16.   </p>
<p>	List of Users</p>
<p>Step 4: Modify faces-config.xml file</p>
<p>Open faces-config.xml from WebContent -&#62; WEB-INF folder and copy following content into it.<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.<br />
   3.<br />
   7.<br />
   8.         userBean<br />
   9.<br />
  10.             net.viralpatel.jsf.helloworld.UserBean<br />
  11.<br />
  12.         session<br />
  13.<br />
  14.<br />
  15.         AddUser<br />
  16.         /AddUser.jsp<br />
  17.<br />
  18.             success<br />
  19.             /ListUser.jsp<br />
  20.<br />
  21.<br />
  22.   </p>
<p>		userBean</p>
<p>			net.viralpatel.jsf.helloworld.UserBean</p>
<p>		session</p>
<p>		AddUser<br />
		/AddUser.jsp</p>
<p>			success<br />
			/ListUser.jsp</p>
<p>In faces config we have defined a managed bean UserBean with scope session and mapping from AddUser.jsp to ListUser.jsp.<br />
Step 5: Execute and run the project</p>
<p>Final step is to execute the project and view it in browser.<br />
For this, right click on Project Name in Project Explorer -&#62; Run As -&#62; Run on Server (Shortcut Alt+Shift+X, R).</p>
<p>add-new-user-jsf-project-eclipse</p>
<p>Once you enter ID and Username and press Add User, following success screen will appear.</p>
<p>add-user-success-jsf-project-eclipse<br />
Download complete WAR file with source</p>
<p><a href="http://viralpatel.net/blogs/download/jsf/HelloWorldJSF.war" rel="nofollow">http://viralpatel.net/blogs/download/jsf/HelloWorldJSF.war</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[JavaServer Faces JSF Validation Tutorial: Error Handling in JSF]]></title>
<link>http://thejusblogspot.wordpress.com/2009/03/02/javaserver-faces-jsf-validation-tutorial-error-handling-in-jsf/</link>
<pubDate>Mon, 02 Mar 2009 02:19:45 +0000</pubDate>
<dc:creator>damuchinni</dc:creator>
<guid>http://thejusblogspot.wordpress.com/2009/03/02/javaserver-faces-jsf-validation-tutorial-error-handling-in-jsf/</guid>
<description><![CDATA[JavaServer Faces technology supports a mechanism for validating the data of editable components. Eac]]></description>
<content:encoded><![CDATA[<p>JavaServer Faces technology supports a mechanism for validating the data of editable components. Each component in JavaServer Faces, created Error Messages during the life cycle of JSF and attached them to FacesContext object. Hence each message is attached to a component in the component tree and the message is displayed into the view at the end of JSF life cycle.<br />
Showing Error Messages on View</p>
<p>JSF provides different tags to handle and display messages on the view. There are two message tags in SUN’s reference implementation of JSF HTML library:<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.   </p>
<p>h:messages is used to display all messages at once. You can place h:messages tag in start of your form. You may need to display only global messages using h:messages tag. For displaying only global messages set globleOnly attribute of h:messages to true.<br />
view plaincopy to clipboardprint?</p>
<p>   1.   </p>
<p>Use h:message to display message attached to one component. An attibute for=”&#8221; can be used to specify the id of a component whose error messages we need to display. h:message is used to display error message next to the component that generated the error. If more then one message is attached to that component, h:message will display the last message.<br />
view plaincopy to clipboardprint?</p>
<p>   1. &#8230;<br />
   2.<br />
   3.<br />
   4. &#8230;  </p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>Each message can have a summary description and a detailed description. When using the h:message tag, the default is to show the detail message. When using the h:messages tag, the default is to display the summary descriptions. To change the defaults, modify the boolean showSummary and showDetail attributes.<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.   </p>
<p>You can also enable component’s detail message to appear as a tooltip. To do so, set tooltip attribute of message tag to true. Note that for enabling this option, showDetail and showSummary must be set to true.</p>
<p>There are four forms of JSF validation:<br />
1. Built-in validation components<br />
2. Application level validations<br />
3. Custom validation components using Validator interface<br />
4. Validation methods in backing beans<br />
Built-in validation components</p>
<p>The SUN’s reference implementation of JSF provides some default validation components that can be leveraged to implement validation of any user inputs. The JSF’s core library provides tags to validate input. Following are few tags that can be used to validate the input.</p>
<p>f:validateDoubleRange : This tag checks the value of component within specified range. The value must be convertible to floating-point type or a floating-point itself.</p>
<p>f:validateLength : This tag checks the length of a value and restrict it within a specified range. The value must be of type java.lang.String.</p>
<p>f:validateLongRange : Checks is component value is within a specified range. The value must be of numeric type or string convertible to a long.<br />
Example:<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.<br />
   3.<br />
   4. &#8230;.<br />
   5.<br />
   6.<br />
   7.   </p>
<p>&#8230;.</p>
<p>Validation using Backing Bean methods</p>
<p>A backing bean method can be used for doing validation of any input field. First we need to create the backing bean method that will get called during validation process. The signature of the method can be:<br />
view plaincopy to clipboardprint?</p>
<p>   1. public void  (FacesContext context, UIComponent component, Object value) { .. }  </p>
<p>public void  (FacesContext context, UIComponent component, Object value) { .. }</p>
<p>Once a backing bean method is ready we can bind it with a component using f:validator tag.<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.   </p>
<p>In above snippet, we have bind checkUsername() method of userBean to component inputText. It is possible to bind more than one validators to one component.</p>
<p>Backing bean method of validation is easy to implement, but this method is specific for one application and may not be reused for different application. To create generic validators which can be used in different application, Validator interface can be used.<br />
Custom validation components using Validator interface</p>
<p>Validator interface can be extended and a custom validator can be created which can be reused across different applications in JSF. To create a custom validator, we need to create a Java class that implements javax.faces.validator.Validator interface. Validator interface provides a method validate () that needs to be implemented. Following is the signature of validate() method.<br />
view plaincopy to clipboardprint?</p>
<p>   1. import javax.faces.component.UIComponent;<br />
   2. import javax.faces.context.FacesContext;<br />
   3. import javax.faces.validator.Validator;<br />
   4. import javax.faces.validator.ValidatorException;<br />
   5. &#8230;<br />
   6. &#8230;<br />
   7. public void validate(FacesContext context, UIComponent component, Object value)<br />
   8.         throws ValidatorException {<br />
   9. }  </p>
<p>import javax.faces.component.UIComponent;<br />
import javax.faces.context.FacesContext;<br />
import javax.faces.validator.Validator;<br />
import javax.faces.validator.ValidatorException;<br />
&#8230;<br />
&#8230;<br />
public void validate(FacesContext context, UIComponent component, Object value)<br />
		throws ValidatorException {<br />
}</p>
<p>Once the Validator is implemented, we need to register this validator in faces-config.xml file. To do so copy following code in faces-config.xml assuming that our validator class name is net.viralpatel.jsf.helloworld.EmailValidator.<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.     emailValidator<br />
   3.     net.viralpatel.jsf.helloworld.EmailValidator<br />
   4.   </p>
<p>	emailValidator<br />
	net.viralpatel.jsf.helloworld.EmailValidator</p>
<p>We can bind this validator with any component using f:validator tag.<br />
view plaincopy to clipboardprint?</p>
<p>   1.<br />
   2.<br />
   3.   </p>
<p>Note that in above code snippet, validatorId attribute of f:validator tag points to the validator’s ID that is registered in faces-config.xml file.<br />
For validating email address we can create a Validator class as:<br />
view plaincopy to clipboardprint?</p>
<p>   1. package net.viralpatel.jsf.helloworld;<br />
   2.<br />
   3. import javax.faces.application.FacesMessage;<br />
   4. import javax.faces.component.UIComponent;<br />
   5. import javax.faces.context.FacesContext;<br />
   6. import javax.faces.validator.Validator;<br />
   7. import javax.faces.validator.ValidatorException;<br />
   8.<br />
   9. public class EmailValidator implements Validator{<br />
  10.     public void validate(FacesContext context, UIComponent component, Object value)<br />
  11.             throws ValidatorException {<br />
  12.<br />
  13.         String email = (String) value;<br />
  14.<br />
  15.         if(!email.contains(&#8220;@&#8221;)) {<br />
  16.             FacesMessage message = new FacesMessage();<br />
  17.             message.setSeverity(FacesMessage.SEVERITY_ERROR);<br />
  18.             message.setSummary(&#8220;Email is not valid.&#8221;);<br />
  19.             message.setDetail(&#8220;Email is not valid.&#8221;);<br />
  20.             context.addMessage(&#8220;userForm:Email&#8221;, message);<br />
  21.             throw new ValidatorException(message);<br />
  22.         }<br />
  23.     }<br />
  24. }  </p>
<p>package net.viralpatel.jsf.helloworld;</p>
<p>import javax.faces.application.FacesMessage;<br />
import javax.faces.component.UIComponent;<br />
import javax.faces.context.FacesContext;<br />
import javax.faces.validator.Validator;<br />
import javax.faces.validator.ValidatorException;</p>
<p>public class EmailValidator implements Validator{<br />
	public void validate(FacesContext context, UIComponent component, Object value)<br />
			throws ValidatorException {</p>
<p>		String email = (String) value;</p>
<p>		if(!email.contains(&#8220;@&#8221;)) {<br />
			FacesMessage message = new FacesMessage();<br />
			message.setSeverity(FacesMessage.SEVERITY_ERROR);<br />
			message.setSummary(&#8220;Email is not valid.&#8221;);<br />
			message.setDetail(&#8220;Email is not valid.&#8221;);<br />
			context.addMessage(&#8220;userForm:Email&#8221;, message);<br />
			throw new ValidatorException(message);<br />
		}<br />
	}<br />
}</p>
<p>Thus by using JSF Validation framework, it is possible to validate user input easily. We saw different ways of validation in JSF: Default validators, backing bean methods and validation through validator interface.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Exemplo de aplicação JSF usando o NetBeans 6.5 em 20 passos]]></title>
<link>http://joaosavio.wordpress.com/2009/02/13/exemplo-de-aplicacao-jsf-usando-o-netbeans-65-em-20-passos/</link>
<pubDate>Fri, 13 Feb 2009 18:44:29 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/02/13/exemplo-de-aplicacao-jsf-usando-o-netbeans-65-em-20-passos/</guid>
<description><![CDATA[Mais um tutorial meu hehehe Clique aqui Abraços João Sávio]]></description>
<content:encoded><![CDATA[<p>Mais um tutorial meu hehehe </p>
<p><a href="http://www.javafree.org/artigo/872082/Exemplo-de-aplicacao-JSF-usando-o-NetBeans-65-em-20-passos.html">Clique aqui</a></p>
<p>Abraços<br />
João Sávio</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Documentação oficial JSF]]></title>
<link>http://joaosavio.wordpress.com/2009/02/06/documentacao-oficial-jsf/</link>
<pubDate>Fri, 06 Feb 2009 18:45:19 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/02/06/documentacao-oficial-jsf/</guid>
<description><![CDATA[Pessoal, muito bom!!! Não deixem de ver aqui. Capítulos 10 a 12. Abraços João Sávio]]></description>
<content:encoded><![CDATA[<p>Pessoal, muito bom!!!</p>
<p>Não deixem de ver <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/bnaph.html">aqui</a>. Capítulos 10 a 12.</p>
<p>Abraços<br />
João Sávio</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Arranjando livros com um jeitinho brasileiro]]></title>
<link>http://joaosavio.wordpress.com/2009/02/04/livros-ilegais/</link>
<pubDate>Thu, 05 Feb 2009 01:17:21 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/02/04/livros-ilegais/</guid>
<description><![CDATA[Olá pessoal, atendendo a pedidos, vou indicar um site onde é muito fácil achar estes livros, princip]]></description>
<content:encoded><![CDATA[<p>Olá pessoal, atendendo a pedidos, vou indicar um site onde é muito fácil achar estes livros, principalmente de computação. E livros atuais!</p>
<p><a href="http://www.4shared.com">Clique aqui</a></p>
<p>Abraços<br />
João Sávio</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Artigo sobre JSF]]></title>
<link>http://joaosavio.wordpress.com/2009/01/28/artigo-sobre-jsf/</link>
<pubDate>Wed, 28 Jan 2009 04:06:59 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/01/28/artigo-sobre-jsf/</guid>
<description><![CDATA[Aqui mais um artigo explicando um pouco sobre JSF (Java Server Faces). Abraços João Sávio]]></description>
<content:encoded><![CDATA[<p><a href="http://www.dsc.ufcg.edu.br/~jacques/cursos/daca/html/jsf/jsf.htm">Aqui</a> mais um artigo explicando um pouco sobre JSF (Java Server Faces).</p>
<p>Abraços<br />
João Sávio</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Ajax com JSF]]></title>
<link>http://joaosavio.wordpress.com/2009/01/21/ajax-com-jsf/</link>
<pubDate>Wed, 21 Jan 2009 20:55:27 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/01/21/ajax-com-jsf/</guid>
<description><![CDATA[Olá pessoal, o artigo do dia é este: Utilizando ajax com JSF de maneira eficiente. Escrito por Rafae]]></description>
<content:encoded><![CDATA[<p>Olá pessoal, o artigo do dia é este: <a href="http://www.rponte.com.br/2008/04/10/utilizando-ajax-com-jsf-de-maneira-eficiente/">Utilizando ajax com JSF de maneira eficiente</a>. Escrito por <a href="http://www.rponte.com.br">Rafael Ponte</a>, explica muito bem conceitos de ajax com JSF.</p>
<p>Abraços pessoal</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Dependency Injection in JSF and 'new' is a dirty word]]></title>
<link>http://hobione.wordpress.com/2009/01/16/dependency-injection-in-jsf/</link>
<pubDate>Fri, 16 Jan 2009 20:06:49 +0000</pubDate>
<dc:creator>HobiOne</dc:creator>
<guid>http://hobione.wordpress.com/2009/01/16/dependency-injection-in-jsf/</guid>
<description><![CDATA[I am going to write some explanation that I have learned from training and discussed with my cohort.]]></description>
<content:encoded><![CDATA[<p>I am going to write some explanation that I have learned from training and discussed with my cohort. Please go get a cup of coffee before you start this journey. Yes, using &#8216;new&#8217; is a dirty word in a sense that in this example, you wont see using &#8216;new&#8217; to instantiate an object instead use the injection capability in the faces-config.xml file.  Please read these articles before proceed.  <a title="Spring into JSF" href="http://www.developer.com/java/ent/article.php/10933_3602061_1" target="_blank">Spring into JavaServer Faces</a> and <a title="JSF-Spring - A very simple example" href="http://jsf-spring.sourceforge.net/quickstart.shtml" target="_blank">JSF-Spring</a></p>
<p><span style="color:#008000;"><br />
<strong>1. What does this following code mean?</strong></span></p>
<pre class="brush: xml; title: ; notranslate" title="">
&lt;managed-bean&gt;
        &lt;managed-bean-name&gt;applicantEditor&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;training.jobapplication.bean.backing.ApplicantEditor&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;

    &lt;/managed-bean&gt;
</pre>
<p>It means to create an instance of ApplicantEditor.java and make it available in request scope.</p>
<pre class="brush: xml; title: ; notranslate" title="">
ApplicantEditor applicantEditor = new ApplicantEditor();
</pre>
<p>Here the ApplicantEditor.java looks like.</p>
<pre class="brush: java; title: ; notranslate" title="">
public class ApplicantEditor {

	private boolean formRendered = false;

	public boolean isFormRendered() {
		return formRendered;
	}

	public void setFormRendered(boolean formRendered) {
		this.formRendered = formRendered;
	}
}
</pre>
<p><strong><span style="color:#008000;">2. Let me explain these following code snippets</span></strong></p>
<pre class="brush: xml; title: ; notranslate" title="">
&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantList&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.backing.ApplicantList&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantEditor&lt;/property-name&gt;
			&lt;value&gt;#{applicantEditor}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantListModel&lt;/property-name&gt;
			&lt;value&gt;#{applicantListModel}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;
</pre>
<p>First of all, an instance has been created for ApplicantList in a request scope. Now, by looking at the line 6, I can tell that ApplicantList.java has a property/instance variable name applicantEditor &#60;property-name&#62; (it is a type of ApplicantEditor.java). Line 7, it&#8217;s calling setApplicantEditor() to set the value &#60;#value&#62;. Also same things are happening in line 10 and 11 for applicantListModel.  Declare the property name using this tag &#60;property-name&#62;, and set the value by using this value tag &#60;value&#62; .  ApplicantList contains a &#8216;has-a&#8217; relationship of ApplicantEditor type.  Easy, piece of cake and here is the proof:</p>
<pre class="brush: java; title: ; notranslate" title="">
package training.jobapplication.bean.backing;

import training.jobapplication.bean.model.ApplicantListModel;

import training.jobapplication.transfer.Applicant;

import javax.faces.component.UICommand;
import javax.faces.event.ActionEvent;

public class ApplicantList {

	private ApplicantForm applicantForm;
	private ApplicantEditor applicantEditor;
	private ApplicantListModel applicantListModel;

	public ApplicantForm getApplicantForm() {
		return applicantForm;
	}

	public void setApplicantForm(ApplicantForm applicantForm) {
		this.applicantForm = applicantForm;
	}

	public ApplicantListModel getApplicantListModel() {
		return applicantListModel;
	}

	public void setApplicantListModel(ApplicantListModel applicantListModel) {
		this.applicantListModel = applicantListModel;
	}

	public void checkAll(ActionEvent actionEvent) {
		getApplicantListModel().checkAll();
	}

	public void create(ActionEvent actionEvent) {
		getApplicantListModel().setSelectedAsNew();
		getApplicantEditor().setFormRendered(true);
	}

	public void deleteChecked(ActionEvent actionEvent) {
		getApplicantListModel().deleteChecked();
	}

	public void edit(ActionEvent actionEvent) {
		UICommand uiCommand = (UICommand)actionEvent.getComponent();
		Applicant applicant = (Applicant)uiCommand.getValue();
		getApplicantListModel().setSelected(applicant);
		getApplicantEditor().setFormRendered(true);
	}

	public void uncheckAll(ActionEvent actionEvent) {
		getApplicantListModel().uncheckAll();
	}

	public ApplicantEditor getApplicantEditor() {
		return applicantEditor;
	}

	public void setApplicantEditor(ApplicantEditor applicantEditor) {
		this.applicantEditor = applicantEditor;
	}
}

</pre>
<p><strong><span style="color:#008000;">3. These snippets are the most confusing to me:</span></strong></p>
<pre class="brush: xml; title: ; notranslate" title="">
&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantListModel&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.model.ApplicantLazyListModel&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantService&lt;/property-name&gt;
			&lt;value&gt;#{applicantService}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;rowsPerPage&lt;/property-name&gt;
			&lt;value&gt;#{userPreferences.rowsPerPage}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;
</pre>
<p>I try my best to explain.  First of all, here&#8217;re some basic java polymorphism code.</p>
<pre class="brush: java; title: ; notranslate" title="">
Car car = new BMW();
car.go(); --&gt; it calls BMW go() method
super.go() --&gt; it calls Car go() method.
</pre>
<p>We have to use our polymorphic power to understand this part. This is what&#8217;s happening in line 2 and 3 in above xml.</p>
<pre class="brush: java; title: ; notranslate" title="">
ApplicantListModel applicantListModel = new ApplicantLazyListModel();
or,
ListModel applicantListModel = new ApplicantLazyListModel();
or,
ApplicantLazyListModel applicantListModel = new ApplicantLazyListModel();
</pre>
<p>We dont know what ApplicantLazyListModel will rertun in run time.  You may have noticed that applicantListModel is not the exact same object type as ApplicantLazyListModel.java  but ApplicantLazyListModel.java extends ApplicantListModel.java.  So there is an &#8216;is-a&#8217; relationship going on. But Line 6, there is no guarantee that applicantService will be an instance variable (property) of ApplicantLazyListModel.java.  Since ApplicantLazyListModel extends ApplicantListModel, we assume applicantService is a member of ApplicantListModel.java not ApplicantLazyListModel.<br />
Okay, got that, if you dont just pretend you do, it will get clear after you see these following code. Now, here is the another fun part.</p>
<pre class="brush: xml; title: ; notranslate" title="">
&lt;managed-property&gt;
&lt;property-name&gt;rowsPerPage&lt;/property-name&gt;
			&lt;value&gt;#{userPreferences.rowsPerPage}&lt;/value&gt;
		&lt;/managed-property&gt;
</pre>
<p>I cant not find the property, rowsPerPage nor in ApplicantLazyListModel or ApplicantListModel, where it can be?  ApplicantListModel also extends ListModel. So, rowPerPage is a member of ListModel.java. rowPerPage is also a proerty of UserPreferences.java.  In the above xml,  I&#8217;d read like this.  rowPerPage is a property of applicantListModel which value has been set by calling get method, userPreferences.rowPerPage. Objects hierarchies are as follows.</p>
<p><a href="http://hobione.files.wordpress.com/2009/01/uml.jpg"><img class="aligncenter size-medium wp-image-365" title="UML" src="http://hobione.files.wordpress.com/2009/01/uml.jpg?w=300&#038;h=176" alt="UML" width="300" height="176" /></a></p>
<pre class="brush: java; title: ; notranslate" title="">
public class ApplicantLazyListModel extends ApplicantListModel {
.....
}
public class ApplicantListModel extends ListModel {

private ApplicantService applicantService;
...
}
public abstract class ListModel {
private int rowsPerPage = -1;
...
}
</pre>
<pre class="brush: java; title: ; notranslate" title="">
package training.jobapplication.bean.util;

public class UserPreferences {

	private int rowsPerPage = 5;
	private int maxPageNumberNavControls = 3;
	private boolean pageNumberNavControlsShown = true;

	public int getRowsPerPage() {
		return rowsPerPage;
	}
	public void setRowsPerPage(int rowsPerPage) {
		this.rowsPerPage = rowsPerPage;
	}
	public int getMaxPageNumberNavControls() {
		return maxPageNumberNavControls;
	}
	public void setMaxPageNumberNavControls(int maxPageNumberNavControls) {
		this.maxPageNumberNavControls = maxPageNumberNavControls;
	}
	public boolean isPageNumberNavControlsShown() {
		return pageNumberNavControlsShown;
	}
	public void setPageNumberNavControlsShown(boolean pageNumberNavControlsShown) {
		this.pageNumberNavControlsShown = pageNumberNavControlsShown;
	}

}
</pre>
<p>Man, now my brain hurts to think all these object relations.  Feel free to write comments and more details in concept wise, visit my cohort <a title="DI" href="http://davidwburns.wordpress.com/2009/01/16/dependency-injection-interfaces-and-mocking-our-new-shop-standard/" target="_blank"></a><a title="David WB" href="http://davidwburns.wordpress.com/2009/01/16/dependency-injection-interfaces-and-mocking-our-new-shop-standard/" target="_blank">David Wilson-Burns</a> blog. He explains why we need Injection instantiation vs. using &#8216;new&#8217; to create an object reference in Java. Here is the full faces-config.xml</p>
<pre class="brush: xml; title: ; notranslate" title="">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;!DOCTYPE faces-config PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN&quot; &quot;http://java.sun.com/dtd/web-facesconfig_1_1.dtd&quot;&gt;
&lt;faces-config&gt;
	&lt;application&gt;
		&lt;message-bundle&gt;JSF-override&lt;/message-bundle&gt;
		&lt;view-handler&gt;com.icesoft.faces.facelets.D2DFaceletViewHandler&lt;/view-handler&gt;
		&lt;variable-resolver&gt;org.springframework.web.jsf.DelegatingVariableResolver&lt;/variable-resolver&gt;
	&lt;/application&gt;
	&lt;!--
	&lt;lifecycle&gt;
&lt;phase-listener&gt;training.jobapplication.lifecycle.LoggingPhaseListener&lt;/phase-listener&gt; &lt;/lifecycle&gt;
	--&gt;
	&lt;converter&gt;
		&lt;converter-id&gt; provinceIdConverter &lt;/converter-id&gt;
		&lt;converter-class&gt; training.jobapplication.converter.ProvinceIdConverter &lt;/converter-class&gt;
	&lt;/converter&gt;
	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantEditor&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.backing.ApplicantEditor&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
	&lt;/managed-bean&gt;

	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantList&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.backing.ApplicantList&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantEditor&lt;/property-name&gt;
			&lt;value&gt;#{applicantEditor}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantListModel&lt;/property-name&gt;
			&lt;value&gt;#{applicantListModel}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;

	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantForm&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.backing.ApplicantForm&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantEditor&lt;/property-name&gt;
			&lt;value&gt;#{applicantEditor}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantListModel&lt;/property-name&gt;
			&lt;value&gt;#{applicantListModel}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;citySupport&lt;/property-name&gt;
			&lt;value&gt;#{citySupport}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;
	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;provinceSupport&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.support.ProvinceSupport&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;provinceService&lt;/property-name&gt;
			&lt;value&gt;#{provinceService}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;
	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;citySupport&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.support.CitySupport&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;cityService&lt;/property-name&gt;
			&lt;value&gt;#{cityService}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;

	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;applicantListModel&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.model.ApplicantLazyListModel&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;applicantService&lt;/property-name&gt;
			&lt;value&gt;#{applicantService}&lt;/value&gt;
		&lt;/managed-property&gt;
		&lt;managed-property&gt;
&lt;property-name&gt;rowsPerPage&lt;/property-name&gt;
			&lt;value&gt;#{userPreferences.rowsPerPage}&lt;/value&gt;
		&lt;/managed-property&gt;
	&lt;/managed-bean&gt;

	&lt;managed-bean&gt;
		&lt;managed-bean-name&gt;userPreferences&lt;/managed-bean-name&gt;
		&lt;managed-bean-class&gt;training.jobapplication.bean.util.UserPreferences&lt;/managed-bean-class&gt;
		&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
	&lt;/managed-bean&gt;
	&lt;navigation-rule&gt;
		&lt;from-view-id&gt;/applicantList.xhtml&lt;/from-view-id&gt;
		&lt;navigation-case&gt;
			&lt;to-view-id&gt;/applicantForm.xhtml&lt;/to-view-id&gt;
		&lt;/navigation-case&gt;
	&lt;/navigation-rule&gt;
	&lt;navigation-rule&gt;
		&lt;from-view-id&gt;/applicantForm.xhtml&lt;/from-view-id&gt;
		&lt;navigation-case&gt;
			&lt;to-view-id&gt;/applicantList.xhtml&lt;/to-view-id&gt;
		&lt;/navigation-case&gt;
	&lt;/navigation-rule&gt;
&lt;/faces-config&gt;
</pre>
<p><strong><span style="color:#ff0000;">Related Topics:</span></strong> What is Dependency Injection (DI) / Inversion of Control (IoC):  &#8220;Hollywood Principle&#8221;—&#8221;don&#8217;t call us, we will call you&#8221;. &#8211; <a title="DI" href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank">Wiki&#8217;s definition<br />
</a><br />
<strong><span style="color:#008000;">Pros:</span></strong> The dependency injection approach offers more flexibility because it becomes easier to create alternative implementations of a given service type, and then to specify which implementation is to be used via a configuration file, without any change to the objects that use the service. This is especially useful in unit testing, because it is easy to inject a mock implementation of a service into the object being tested.</p>
<p><strong><span style="color:#ff6600;">Cons:</span></strong> The price paid for that additional flexibility is greatly increased complexity and the fact that the program is no longer deterministic: it&#8217;s no longer possible to tell what functions will be called just by looking at the code.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Meu 1º. artigo publicado]]></title>
<link>http://joaosavio.wordpress.com/2009/01/13/meu-1%c2%ba-artigo-publicado/</link>
<pubDate>Tue, 13 Jan 2009 02:30:24 +0000</pubDate>
<dc:creator>João Sávio</dc:creator>
<guid>http://joaosavio.wordpress.com/2009/01/13/meu-1%c2%ba-artigo-publicado/</guid>
<description><![CDATA[Olá pessoal, estou muito feliz hoje, acabei de ter o meu 1º. artigo publicado em um site!!! Entenden]]></description>
<content:encoded><![CDATA[<p>Olá pessoal, estou muito feliz hoje, acabei de ter o meu 1º. artigo publicado em um site!!!</p>
<p><a href="http://www.javafree.org/artigo/871659/Entendendo-um-pouco-de-Java-Server-Faces-JSF">Entendendo um pouco de Java Server Faces (JSF)</a></p>
<p>Agradecimentos para o <a href="http://www.javafree.org">JavaFree</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[JSF onload action during restore and render response phase]]></title>
<link>http://webmoli.com/2008/11/10/jsf-onload-action-during-restore-and-render-response-phase/</link>
<pubDate>Tue, 11 Nov 2008 01:38:32 +0000</pubDate>
<dc:creator>Venkat</dc:creator>
<guid>http://webmoli.com/2008/11/10/jsf-onload-action-during-restore-and-render-response-phase/</guid>
<description><![CDATA[When comparing JSF with action based frameworks like Struts, Webwork, etc. one of the major missing]]></description>
<content:encoded><![CDATA[When comparing JSF with action based frameworks like Struts, Webwork, etc. one of the major missing]]></content:encoded>
</item>
<item>
<title><![CDATA[MVC in Java Using Spring Framework]]></title>
<link>http://donvaillancourt.wordpress.com/2008/10/21/mvc-in-java-using-spring-framework/</link>
<pubDate>Tue, 21 Oct 2008 18:11:59 +0000</pubDate>
<dc:creator>Don</dc:creator>
<guid>http://donvaillancourt.wordpress.com/2008/10/21/mvc-in-java-using-spring-framework/</guid>
<description><![CDATA[I love the MVC design pattern, it&#8217;s the easiest way to build and manage websites.  I have used]]></description>
<content:encoded><![CDATA[<p>I love the MVC design pattern, it&#8217;s the easiest way to build and manage websites.  I have used <a href="http://cakephp.org/">CakePHP</a> and <a href="http://framework.zend.com/">Zend Framework</a> for PHP; both make building sites to easy.  So I decided to look into something similar for Java web applications and found <a href="http://www.springframework.org/webflow">Spring Web Flow</a> which seems to provide what I am looking for.  I had started to work on a project in PHP using Zend Framework and through I&#8217;d move this over to Java.</p>
<p>Spring Web Flow seems to support <a href="http://java.sun.com/javaee/javaserverfaces/">Java Server Faces</a> via <a href="http://static.springframework.org/spring-webflow/docs/2.0.x/reference/html/ch12.html">Spring Faces</a> which I like.</p>
<p>So I&#8217;ll be exploring this for the next little while.  I usually ramp up pretty fast, so I&#8217;ll see how this works out.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Criando Skin para JBoss Rich Faces]]></title>
<link>http://yross.wordpress.com/2008/10/16/criando-skin-para-jboss-rich-faces/</link>
<pubDate>Thu, 16 Oct 2008 14:47:38 +0000</pubDate>
<dc:creator>Ythalo Rossy</dc:creator>
<guid>http://yross.wordpress.com/2008/10/16/criando-skin-para-jboss-rich-faces/</guid>
<description><![CDATA[Um breve passo-a-passo de como desenvolver e configurar um SKIN para o Rich Faces. Passo 1: Crie um]]></description>
<content:encoded><![CDATA[Um breve passo-a-passo de como desenvolver e configurar um SKIN para o Rich Faces. Passo 1: Crie um]]></content:encoded>
</item>
<item>
<title><![CDATA[ICEFaces effect]]></title>
<link>http://hobione.wordpress.com/2008/09/05/icefaces-effect/</link>
<pubDate>Fri, 05 Sep 2008 19:36:00 +0000</pubDate>
<dc:creator>HobiOne</dc:creator>
<guid>http://hobione.wordpress.com/2008/09/05/icefaces-effect/</guid>
<description><![CDATA[I was trying to make ICEfaces effect using &lt;ice:effect&gt; tag.  But apprently it did not work wi]]></description>
<content:encoded><![CDATA[<p>I was trying to make ICEfaces effect using &#60;ice:effect&#62; tag.  But apprently it did not work without &#60;ice:panelGroup&#62;<br />
<a></a><br />
<a title="ICEfaces Forum" href="http://www.icefaces.org/JForum/posts/list/0/8161.page#40290" target="_blank">http://www.icefaces.org/JForum/posts/list/0/8161.page#40290</a></p>
<p>Thanks</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Java Server Faces and Google Chrome --- Goodbye IE!]]></title>
<link>http://netbeansboy.org/2008/09/03/java-server-faces-and-google-chrome-goodbye-ie/</link>
<pubDate>Wed, 03 Sep 2008 08:41:27 +0000</pubDate>
<dc:creator>Paul C</dc:creator>
<guid>http://netbeansboy.org/2008/09/03/java-server-faces-and-google-chrome-goodbye-ie/</guid>
<description><![CDATA[When Firefox 3 came out I was hoping it would run JSF faster than IE did, instead it actually failed]]></description>
<content:encoded><![CDATA[<p>When Firefox 3 came out I was hoping it would run JSF faster than IE did, instead it actually failed to run at all well so we just forgot about it and went back to sunny IE for our clients.</p>
<p>Today! I install Google Chrome&#8230; Actually I expected JSF not to work at all&#8230; let alone how it does.</p>
<p>JSF runs VERY VERY VERY Fast in Google Chrome, sorry, actually, the whole internet runs VERY VERY VERY FAST.</p>
<p>Our tests so far show perfect compatibilty with JSF and it turns the web browser into an application browser, apart from the fact we can perform more customisations of the browser and use it as a real tool for accessing the multiple JSF projects we have.</p>
<p>We can now see bottlenecks without running profiler. The time between the pages loading shows where the problems are. IE really struggled with massive amounts of componants on pages. </p>
<p><strong>GOOD JOB GOOGLE</strong></p>
<p>If you&#8217;ve not tried Google Chrome please please do&#8230; hitch it up to your JSF application (or any web app) or your favorite website and just fall off your chair at the MARKED DIFFERENCE in speed. </p>
<p>I would think once word gets out that people will not want to use IE any longer.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Making an email link in a table with Java Server Faces]]></title>
<link>http://netbeansboy.org/2008/08/27/making-an-email-link-in-a-table-with-java-server-faces/</link>
<pubDate>Wed, 27 Aug 2008 14:26:26 +0000</pubDate>
<dc:creator>Paul C</dc:creator>
<guid>http://netbeansboy.org/2008/08/27/making-an-email-link-in-a-table-with-java-server-faces/</guid>
<description><![CDATA[Ok, here&#8217;s how to do it. 1. Edit the table with the email in it &#8211; and set the type of th]]></description>
<content:encoded><![CDATA[<p>Ok, here&#8217;s how to do it.</p>
<p>1. Edit the table with the email in it &#8211; and set the type of the email field to a HYPERLINK.</p>
<p>2. Create a STATIC TEXT field on the form somewhere, change its ID to <strong>txtJAVASCRIPT</strong>, turn off the escape property and add a binding attribute to it. We&#8217;ll use this to run a bit of javascript to call the email.</p>
<p>3. Add a binding attribute to tablerowgroup1 on your table</p>
<p>4. In the action code for the Hyperlink insert the following code, this will make the javascript basically tell the browser to open the users email programme with the email address in the subject. Obviously you&#8217;ll need to change tblcustomersDataProvider1 to your data provider and email to the field in the database corresponding to the persons email address.</p>
<pre>public String hyperlink2_action() {
        // Process email
        tblcustomersDataProvider1.setCursorRow(
                tableRowGroup1.getRowKey());
        String sEmail=tblcustomersDataProvider1.getValue("email")+"";
        if (!sEmail.equals("")) {
           
            txtJAVASCRIPT.setText("&#60;script language='javascript'&#62;\nwindow.location=\"<a href="mailto:&#34;+sEmail+&#34;\&#34;;\n&#60;/script">mailto:"+sEmail+"\";\n&#60;/script</a>&#62;");
           
        } else {
           
            txtJAVASCRIPT.setText("");
        }
        return null;
    }</pre>
<p>5. To cancel the email request we add the following into the public void preprocess() code for the jsf page</p>
<pre>    txtJAVASCRIPT.setText(""); </pre>
<p>Using this technique you can pretty much make any javascript happen on a page based on an event.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[ICEFaces tree, data load]]></title>
<link>http://hobione.wordpress.com/2008/08/25/icefaces-tree-data-load/</link>
<pubDate>Mon, 25 Aug 2008 18:36:50 +0000</pubDate>
<dc:creator>HobiOne</dc:creator>
<guid>http://hobione.wordpress.com/2008/08/25/icefaces-tree-data-load/</guid>
<description><![CDATA[How do I load first tree node data set by default?  Here is an screen shot when the application gets]]></description>
<content:encoded><![CDATA[<p>How do I load first tree node data set by default?  Here is an screen shot when the application gets initialized.</p>
<div id="attachment_104" class="wp-caption alignnone" style="width: 474px"><img class="size-medium wp-image-104" src="http://hobione.files.wordpress.com/2008/08/treeloadstep12.jpg?w=464&#038;h=96" alt="EPF Tree" width="464" height="96" /><p class="wp-caption-text">EPF Tree</p></div>
<p>Now, if I click &#8220;EPF Work Group&#8221;, I get this following data</p>
<div id="attachment_105" class="wp-caption alignnone" style="width: 379px"><img class="size-medium wp-image-105" src="http://hobione.files.wordpress.com/2008/08/treeloadstep21.jpg?w=369&#038;h=93" alt="EPF Tree 2" width="369" height="93" /><p class="wp-caption-text">EPF Tree 2</p></div>
<p>But, I&#8217;d like to see this screen without clicking &#8220;EPF Work Group&#8221; tree node or when application gets initialized.  I assume, I have to do it in backing bean, fire up an Action Event or so on.</p>
<p><strong>Solution</strong>: <a title="Solution for the problem" href="http://www.icefaces.org/JForum/posts/list/9588.page" target="_blank">http://www.icefaces.org/JForum/posts/list/9588.page</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Arbitrary validation in JSF using validator attribute]]></title>
<link>http://webmoli.com/2008/08/12/arbitrary-validation-in-jsf/</link>
<pubDate>Tue, 12 Aug 2008 15:50:39 +0000</pubDate>
<dc:creator>Venkat</dc:creator>
<guid>http://webmoli.com/2008/08/12/arbitrary-validation-in-jsf/</guid>
<description><![CDATA[Recently I was searching for an example about the arbitrary validation in JSF component, found very]]></description>
<content:encoded><![CDATA[Recently I was searching for an example about the arbitrary validation in JSF component, found very]]></content:encoded>
</item>
<item>
<title><![CDATA[Construir JBoss Developer Studio]]></title>
<link>http://hedellinger.wordpress.com/2008/07/27/construir-jboss-developer/</link>
<pubDate>Sun, 27 Jul 2008 18:53:49 +0000</pubDate>
<dc:creator>hedellinger</dc:creator>
<guid>http://hedellinger.wordpress.com/2008/07/27/construir-jboss-developer/</guid>
<description><![CDATA[Como se sabe JBoss Server es un servidor de aplicaciones para J2EE, el más popular entre libres y gr]]></description>
<content:encoded><![CDATA[<p>Como se sabe JBoss Server es un servidor de aplicaciones para J2EE, el más popular entre libres y gratuitos.  Durante mucho tiempo la gente de Jboss desarrolló plugins (Jboss tools), para integrar Eclipse a  Jboss Server, por otro lado Exadel con el potente plugin (también para eclipse), para desarrollar aplicaciones Struts y JSF hacían de Eclipse un IDE apropiado para un entorno de desarrollo de aplicaciones para Jboss Server, pues bien, Jboss adquirió el plugin de Exadel con la finalidad de integrarlo a los Jboss tools y así crear a partir de Eclipse un IDE integrado a Jboss Server, así nace “Red Hat Developer Studio”, en sus versiones beta venía un instalador que hacía todo el trabajo, bastaba sólo con ejecutarlo y quedaba todo listo, pues bien cuando llegó la primera release pasaron dos cosas: se decidió cambiar el nombre de “Red Hat Developer Studio” por el de “Jboss Developer Studio” y además se comenzó a cobrar por la descarga del instalador, ¿cómo pasó esto?, fácil, la licencia EPL (Eclipse Public License), lo permite, además de que Red Hat, me imagino, considera un instalador como soporte.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Lo bueno de todo esto es que en vez de pagar por el instalador, podemos crear por nuestra cuenta el Jboss Developer Studio, ¿cómo?, de la siguiente forma:</p>
<p style="margin-bottom:0;">Ir a la página:<a href="http://download.jboss.org/jbosstools/builds/nightly/"></a></p>
<p style="margin-bottom:0;"><a href="http://download.jboss.org/jbosstools/builds/nightly/">http://download.jboss.org/jbosstools/builds/nightly/</a></p>
<p style="margin-bottom:0;">Una vez ahí, elegir la carpeta con la fecha y la hora más reciente.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Luego descargar todo lo que 	aparezca debajo de “<strong>Build Drivers” </strong><span>(los 	6 links)</span><strong>, notar que el primer Link</strong><span> es para bajar eclipse, ese link lleva directo a la versión para 	Windows, los linuxeros deberán saber bajar la versión para Linux 	del directorio en donde aparece el link para windows, es decir, si 	el link de descarga para windows es:</span></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><span> <a href="http://repository.jboss.com/eclipse/sdk/3.4RC3/eclipse-SDK-3.4RC3-win32.zip">http://repository.jboss.com/eclipse/sdk/3.4RC3/eclipse-SDK-3.4RC3-win32.zip</a></span></p>
<p style="margin-bottom:0;">entonces deben situarse en:</p>
<p style="margin-bottom:0;"><span> <a href="http://repository.jboss.com/eclipse/sdk/3.4RC3/">http://repository.jboss.com/eclipse/sdk/3.4RC3/</a></span></p>
<p style="margin-bottom:0;">Se entiende???, espero q sí.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Luego hay que descargar el plugin <strong>Jboss-tools</strong> (aparece justo debajo de donde dice <strong>All Plugins</strong>), deben descargar el que corresponda a su arquitectura (Mac, Windows, Linux).</p>
<p style="margin-bottom:0;">Una vez 	descargado todo se debe descomprimir el link que daba a eclipse y 	luego los otros links (que son plugins) deben descomprimirlos en 	alguna otra carpeta.  Podrán darse cuenta de que al descomprimir 	los plugins aparece un directorio llamado <strong>eclipse</strong>, deben 	ubicarse dentro de él y podrán ver dos carpetas <strong>features </strong>y 	<strong>plugins </strong>(Quizás también<strong> </strong>aparezca a veces<strong> readme</strong>).  Luego 	tendrán que ubicarse dentro de cada uno de esos directorios y 	copiar <span style="text-decoration:none;">todo</span> el contenido 	en los directorios del mismo nombre que se encuentran en la ruta en 	donde han descomprimido eclipse, por ejemplo:</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">cp -r /home/usuario/plugins/eclipse/features/*     /home/usuario/eclipse/features</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Luego debemos descargar Xdoclet, que nos facilitará la creación de  EJB&#8217;s, Contenido Web, etc.  Para eso deben ir a:</p>
<p style="margin-bottom:0;"><a href="http://sourceforge.net/project/showfiles.php?group_id=31602">http://sourceforge.net/project/showfiles.php?group_id=31602</a></p>
<p style="margin-bottom:0;">Y descargar la versión más reciente.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Una vez que lo descompriman deben mover la carpeta que aparece (<strong>xdoclet{version}</strong>), al directorio <strong>plugins</strong> del directorio en donde han descomprimido eclipse (en realidad pueden ubicarla en cualquier parte, pero por orden yo la dejo ahí).  Luego hay que ejecutar eclipse.  Una vez cargado deben ir a <strong>Window-&#62;Preferences </strong>y escoger <strong>xdoclet </strong>y donde dice <strong>Xdoclet Home</strong> deben escoger el directorio en donde han dejado la carpeta descomprimida del plugin y luego en <strong>Version</strong> deben escoger la versión que se han descargado.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Eso es todo!!!, ya está listo <strong>Jboss Developer Studio, </strong>ahora queda descargar e instalar Jboss Server y enlazarlo al IDE que hemos creado, es muy simple, pero eso ya es tema de otro post.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Writing out from a Java Server Faces table to a CSV....]]></title>
<link>http://netbeansboy.org/2008/07/25/writing-out-from-a-jsf-table-to-a-csv/</link>
<pubDate>Fri, 25 Jul 2008 14:39:01 +0000</pubDate>
<dc:creator>Paul C</dc:creator>
<guid>http://netbeansboy.org/2008/07/25/writing-out-from-a-jsf-table-to-a-csv/</guid>
<description><![CDATA[Imagine if you will that you have a Java Server Faces table and you want to write it out to a CSV fi]]></description>
<content:encoded><![CDATA[<p>Imagine if you will that you have a Java Server Faces table and you want to write it out to a CSV file.</p>
<p>1. Put The following code in your application bean.</p>
<pre>public String OutputFromTableToCSV(
String sFilename,
TableRowGroup tableRowGroup1,
CachedRowSetDataProvider tblzonesDataProvider) {
// Create an ooutput text file
FileOutputStream out; // declare a file output object
PrintStream p; // declare a print stream object

try {
out = new FileOutputStream(sFilename
+".txt");

p=new PrintStream(out);
} catch (Exception e) {
return "Error, could not write to "+sFilename+".txt";
}

String sFields = "";
String sColumnTitle = "";
String sThisFieldName="";
List theseColumns = tableRowGroup1.getChildren();
// Columns
for (int i = 0; i &#60; tableRowGroup1.getColumnCount(); ++i) {
sColumnTitle = sColumnTitle.concat(sColumnTitle);
sColumnTitle = sColumnTitle.concat(",");

// Get the SQL mapped fields
TableColumn thisComponant = (TableColumn) theseColumns.get(i);
try {
sColumnTitle = sColumnTitle.concat(
thisComponant.getHeaderText());
} catch (Exception e) {
}
}
if (!sColumnTitle.equals("")) {
sColumnTitle=sColumnTitle.substring(1); // Chop off initial ,
}
// Write it out
p.println(sColumnTitle);

RowKey[] TheseRows = tblzonesDataProvider.getAllRows();
for (int rowCount = 0; rowCount &#60; TheseRows.length; ++rowCount) {
// Now do the rows
tblzonesDataProvider.setCursorRow(TheseRows[rowCount]);
for (int i = 0; i &#60; tableRowGroup1.getColumnCount(); ++i) {
sFields = sFields.concat(sFields);
sFields = sFields.concat(",");
// Get the SQL mapped fields
TableColumn thisColumn = (TableColumn) theseColumns.get(i);
UIComponent thisChild=(UIComponent) thisColumn.getChildren().get(0);
// ",[#{currentRow.value['ZoneDescription']}]"
try {
sThisFieldName = thisChild.getValueExpression("text").toString();
sThisFieldName = sThisFieldName.substring(
sThisFieldName.indexOf("['") + 2);
sThisFieldName = sThisFieldName.substring(0,
sThisFieldName.indexOf("']"));

} catch (Exception e) {
}

// Add the field to the string to write out

sFields = sFields.concat(
tblzonesDataProvider.getValue(sThisFieldName).toString()
);

}
if (!sFields.equals("")) {
sFields = sFields.substring(1); // Chop off initial ,
}
p.println(sFields);

sFields="";
} // Next Row
// At this point we have to csv strings
// sfields and column title

// Now we have a comma delimited string called sresult in theory

p.close();
return "OK";
}</pre>
<p>2. On the form with the JSF page.<br />
a. Add the binding attribute to the tableRowGroup (in the left hand bottom pane).</p>
<p>Create an &#8220;Export to CSV file&#8221; button and in the event when clicked add this code:-</p>
<p>thefilename &#8211; the filename you want to write to<br />
tableRowGroup1 - The table row group from your JSF page table<br />
yourdataprovider &#8211; The data provider that feeds the JSF table</p>
<pre>getApplicationBean1().OutputFromTableToCSV("thefilename", tableRowGroup1, yourDataProvider);</pre>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Popup Windows Javaserver faces.]]></title>
<link>http://netbeansboy.org/2008/07/17/popup-windows-javaserver-faces/</link>
<pubDate>Thu, 17 Jul 2008 11:11:33 +0000</pubDate>
<dc:creator>Paul C</dc:creator>
<guid>http://netbeansboy.org/2008/07/17/popup-windows-javaserver-faces/</guid>
<description><![CDATA[I wanted to build a popup window that I could use to bring up a print dialog in a web page. It]]></description>
<content:encoded><![CDATA[<p>I wanted to build a popup window that I could use to bring up a print dialog in a web page. It&#8217;s no use using the JAVA print dialog because it would appear on the web server.</p>
<p>So:-</p>
<p>FORM WITH DATA &#8212;&#62; CLICK PRINT &#8212;&#62; Bring up Popup Print Window &#8212;&#62; CLOSE WINDOW &#8211;&#62; RETURN TO FORM</p>
<p><strong>The Popup JSF page</strong></p>
<p>1. Create the Popup window java server faces page. (just a normal jsf page)<br />
2. Add a Button to the page to close it<br />
3. Add a static text box, rename it to txtJAVASCRIPT, set the escape checkbox to off, add a binding attribute<br />
4. Now, on the Popup I have a close button and the code in the close button simply sets the static text box&#8217;s javascript:</p>
<pre>public String cmdClOSE_action() {
getSessionBean1().sPrintReportRequest="";
        txtJAVASCRIPT.setText("&#60;script language='javascript'&#62;window.close();&#60;/script&#62;");
        txtJAVASCRIPT.setVisible(true); 
        return null;
}</pre>
<p><strong>The calling JSF page</strong></p>
<p>1. Create your page that you want to call the popup box.<br />
2. Add the popup code into the JSF for the page calling the popup (I put it into a page fragement that appears on every page):-</p>
<pre>&#60;script LANGUAGE="JavaScript"&#62;
       
            function popUp(URL) {
            day = new Date();
            id = day.getTime();
            eval("page" + id + " = window.open(URL, '" + id + "',
'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=382,height=286,left = 529,top = 307');");
            }
       
        &#60;/script&#62;</pre>
<p>Ofcourse you can change the settings as you wish (i.e. popup window size)</p>
<p>3. Making the popup appear.</p>
<p>a. Add a static text box, rename it to txtJAVASCRIPT, set the escape checkbox to off, add a binding attribute (this stores the javascript when i want the box to appear).</p>
<p>b. Add a button to the form you want the popup to appear on, in the button java put :-</p>
<pre>  public String cmdPRINT_action() {
      // in this case i am printing a report so i set the session variable to tell the server the popup needs to be displayed
         getSessionBean1().sPrintReportRequest="rptzones";
// now set the txt of the static text box I set up on the same page, note its normally not visible or rendered
// in this case the popup is a jsf page called frmPRINTREPORTS.jsp
         txtJAVASCRIPT.setRendered(true);
         txtJAVASCRIPT.setText("&#60;script language='javascript'&#62;popUp('frmPRINTREPORTS.jsp');&#60;/script&#62;" );
        txtJAVASCRIPT.setVisible(true);
       
       
        return null;
    }
 </pre>
<p> </p>
<p>4. Lastly in the form that called the popup I want to stop it from appearing so I have to kill the javascript.</p>
<pre>    public void preprocess() {
       
        String sReportRequest=getSessionBean1().sPrintReportRequest;
        if (sReportRequest.equals("")) {
            txtJAVASCRIPT.setVisible(false);
            txtJAVASCRIPT.setText("");
           
        }
       
       
   </pre>
<p>Note that the code has to run in the preprocess stage of the page, this simply makes sure that the javascript won&#8217;t run when it&#8217;s not wanted.</p>
<p>There you go!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[JSF default timezone and date pattern]]></title>
<link>http://webmoli.com/2008/07/08/jsf-default-timezone-and-date-pattern/</link>
<pubDate>Tue, 08 Jul 2008 03:49:55 +0000</pubDate>
<dc:creator>Venkat</dc:creator>
<guid>http://webmoli.com/2008/07/08/jsf-default-timezone-and-date-pattern/</guid>
<description><![CDATA[By default JSF using GMT timezone to convert the date into display format. I did Google search about]]></description>
<content:encoded><![CDATA[By default JSF using GMT timezone to convert the date into display format. I did Google search about]]></content:encoded>
</item>
<item>
<title><![CDATA[Master / Detail Pages with Netbeans 6.1 and Java Server Faces]]></title>
<link>http://netbeansboy.org/2008/07/04/master-detail-pages-with-netbeans-61-and-java-server-faces/</link>
<pubDate>Fri, 04 Jul 2008 12:04:52 +0000</pubDate>
<dc:creator>Paul C</dc:creator>
<guid>http://netbeansboy.org/2008/07/04/master-detail-pages-with-netbeans-61-and-java-server-faces/</guid>
<description><![CDATA[A lot of times you will want to create a page that has a header and a table that is a child, such as]]></description>
<content:encoded><![CDATA[<p>A lot of times you will want to create a page that has a header and a table that is a child, such as a purchase order where you have a &#8220;Purchase order header&#8221; and &#8220;Purchase Order Lines&#8221;</p>
<p><a href="http://netbeansboy.files.wordpress.com/2008/07/purchaseorder.jpg"><img class="aligncenter size-medium wp-image-74" src="http://netbeansboy.files.wordpress.com/2008/07/purchaseorder.jpg?w=300&#038;h=138" alt="" width="300" height="138" /></a></p>
<p>In this case I have a master detail form here as you can see. Now. To make sure the detail form only has the data in from THAT purchase order I insert some code into the init() function of the page.</p>
<pre> try {
            String sSQL="SELECT ALL polines.id, polines.poid, polines.description, polines.qty, polines.price, polines.total  FROM polines WHERE poid=" + cachedRowSetDataProvider1.getValue("id");
            polinesDataProvider.getCachedRowSet().setCommand(sSQL);
            polinesDataProvider.getCachedRowSet().execute();
            polinesDataProvider.refresh();
              } catch (Exception e) {
                  
              }</pre>
<p>(polinesDataProvider is the rows of the table, the &#8220;detail part&#8221; if you like, cachedDataProvider1 is the header)</p>
<p>Now here&#8217;s the tricky part. Normally I would do an ADDNEW and just do:-</p>
<pre> RowKey newRow = polinesDataProvider.appendRow();
        polinesDataProvider.setCursorRow(newRow);
        polinesDataProvider.setValue("poid", cachedRowSetDataProvider1.getValue("id"));
        return null;</pre>
<p><strong>But</strong> I discovered that when you do the &#8220;CommitChanges()&#8221; command the new row is not saved because there is a WHERE in the command query I set earlier. This is a bug (<span style="font-size:11pt;font-family:&#34;"><a href="http://www.netbeans.org/issues/show_bug.cgi?id=139024"><span style="color:#800080;">http://www.netbeans.org/issues/show_bug.cgi?id=139024</span></a>)</span>, in fact the software just ignores the command (I got my MYSQL server to log the queiries and nothing happens).</p>
<p>So the workaround code for the New Item (new detail line) button is:-</p>
<pre>        RowKey newRow = polinesDataProvider.appendRow();
        polinesDataProvider.setCursorRow(newRow);
        polinesDataProvider.setValue("poid", cachedRowSetDataProvider1.getValue("id"));
        polinesDataProvider.commitChanges();
        polinesDataProvider.refresh();
        return null;</pre>
<p>Note that I set the poid field to the header&#8217;s PrimaryKey otherwise it will not look up correctly.</p>
<p>Strangely If you edit a record it works absolutely fine with the default just &#8220;commitingchanges&#8221; when someone clicks save.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[A glimpse of Java Server Faces]]></title>
<link>http://seesameer.wordpress.com/2008/06/14/a-glimpse-of-java-server-faces/</link>
<pubDate>Sat, 14 Jun 2008 09:27:58 +0000</pubDate>
<dc:creator>seesameer</dc:creator>
<guid>http://seesameer.wordpress.com/2008/06/14/a-glimpse-of-java-server-faces/</guid>
<description><![CDATA[JavaServer Faces technology is a server-side user interface component framework for Java technology-]]></description>
<content:encoded><![CDATA[<p>JavaServer Faces technology is a server-side user interface<br />
component framework for Java technology-based web<br />
applications. JavaServer(TM) Faces technology simplifies<br />
building user interfaces for JavaServer applications.<br />
JSF is an application framework for creating web based user<br />
interfaces. JSF provides Web application lifecycle management<br />
through a controller servlet.</p>
<p>JSF eases Web-based application development because it:</p>
<p>* Lets you create user interfaces from a set of standard,<br />
reusable server-side components<br />
* Provides a set of JSP tags to access those components<br />
* Transparently saves state information and repopulates forms<br />
when they redisplay<br />
* Provides a framework for implementing custom components<br />
* Encapsulates event handling and component rendering so you<br />
can use standard</p>
<p>According to SUN:</p>
<p>JavaServer Faces technology is a server-side user interface<br />
component framework for Java technology-based web<br />
applications. A set of APIs for: representing UI components<br />
and managing their state, handling events and input<br />
validation,defining page navigation, and supporting<br />
internationalization and accessibility.</p>
<p>A JavaServer Pages (JSP) custom tag library for expressing<br />
a JavaServer Faces interface within a JSP page. JSF is built<br />
on standard J2EE technologies,which include JSP tag<br />
libraries,a controller servlet, and other Java classes that<br />
make up its UI component library and event-processing model.</p>
<p>The Java Enterprise Edition 5 platform includes JavaServer<br />
Faces (JSF) technology,which provides a mature and extensible<br />
user interface component model.The design of this model makes<br />
it easy for application developers to create custom components<br />
by extending the standard components included with JSF and to<br />
reuse these components across applications.</p>
<p>Tools supporting JSF-Java Server Faces:</p>
<p>* Borland JBuilder Enterprise Edition 2005<br />
* Eclipse with Exadel Studio Pro IDE<br />
* Eclipse with Nitrox JSF IDE<br />
* IBM Rational with JSF Support<br />
* Macromedia Dreamweaver with JSTL &#38; JSF extensions<br />
* MyEclipse with JSF Designer<br />
* Oracle&#8217;s JDeveloper IDE<br />
* Sun&#8217;s Java Studio Creator</p>
<p>Important Links For Developers</p>
<p><a href="http://exadel.com/tutorial/jsf/jsftutorial-kickstart.html" rel="nofollow">http://exadel.com/tutorial/jsf/jsftutorial-kickstart.html</a></p>
<p><a href="http://resources.coreservlets.com/jsf.html" rel="nofollow">http://resources.coreservlets.com/jsf.html</a></p>
<p>To Create Your Own Java Server Faces Components</p>
<p><a href="http://www.jsftutorials.net/components/" rel="nofollow">http://www.jsftutorials.net/components/</a></p>
]]></content:encoded>
</item>

</channel>
</rss>
