SlideShare une entreprise Scribd logo
1  sur  55
JSF (JavaServer Faces) Part 2 – In Depth
Contents (2) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Event Model
JSF Event Model ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Types Of Events ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Action Events ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Action Events Handling ,[object Object],[object Object],[object Object],[object Object],<h:commandButton value = &quot;Test Action Listener &quot;  actionListener=&quot;#{testActionListener.actionMethod}&quot;/> public void actionMethod(ActionEvent actionEvent){ //some code goes here } In the JSP page method in backing bean
Action Events Live Demo
Value Change Events ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Value Change Events Handling ,[object Object],[object Object],[object Object],<h:selectOneMenu value=&quot;#{addressBean.country}&quot; valueChangeListener=&quot;#{addressBean.populatePinNumber}&quot;> </h:selectOneMenu>
Registering  ValueChangeListener ,[object Object],<h:inputText id=&quot;inputId&quot; value=&quot;#{someBean.someProperty}&quot;> <f:valueChangeListener  type=&quot;com.myProject.myApp.ValueChangeListenerImpl&quot;> </h:inputText>
Value Change  Events Live Demo
Phase Events ,[object Object],[object Object],[object Object],[object Object],<lifecycle>  <phase-listener>  ham.jsf.events.actions.TestActionListener  </phase-listener>  </lifecycle>
Faces Messages
Faces Messages ,[object Object],[object Object],[object Object],[object Object],[object Object],<h:messages style=&quot;color: red&quot; <h:message for=&quot; inputId &quot; style=&quot;color: red&quot; /> <h:inputText id=&quot; inputId &quot; value=&quot;#{someBean.someProperty}&quot;
Faces Messages (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],FacesMessage facesMessage = new FacesMessage( FacesMessage.SEVERITY_INFO,  &quot;message summary&quot;, &quot;detailed message&quot;); facesContext.addMessage(&quot;clinetId&quot;, facesMessage); Here pass  null  if you want the message to be shown as global message
Validation Model
Validation Model ,[object Object],[object Object],[object Object]
Standard validations ,[object Object],Validator class Tag Function DoubleRangeValidator validateDoubleRange Checks whether the local value of a component is within a certain range. The value must be floating-point or  convertible to it LengthValidator  validateLength   Checks whether the length of a component’s value is within a certain range. The value must be a String.  LongRangeValidator  validateLongRange Checks whether the local value of a component is within a certain range. The value must be any numeric type or String that can be converted to a long.
Custom validators ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Custom validator registration ,[object Object],<validator>  ...  <validator-id>FormatValidator</validator-id>  <validator-class>  com.sun.bookstore6.validators.FormatValidator  </validator-class>  <attribute>  ...  <attribute-name>formatPatterns</attribute-name>  <attribute-class>java.lang.String</attribute-class > </attribute> </validator>
Validation method - example ,[object Object],[object Object],public void validateEmail(FacesContext context, UIComponent toValidate, Object value) {  String message = &quot;&quot;;  String email = (String) value;  if (email.contains(’@’)) {  ((UIInput)toValidate).setValid(false);  message = CoffeeBreakBean.loadErrorMessage(context,  CoffeeBreakBean.CB_RESOURCE_BUNDLE_NAME,  &quot;EMailError&quot;); context.addMessage(toValidate.getCli e ntId(context), new FacesMessage(message)); } }
Live Demo UCN Validation
Conversion Model
Conversion Overview ,[object Object],[object Object],[object Object],[object Object]
Converters ,[object Object],[object Object],[object Object],[object Object]
Standard Converters ,[object Object],[object Object],[object Object],[object Object]
Using converters ,[object Object],[object Object],<h:inputText id=&quot;age&quot; value=&quot;#{user.age}&quot; >  <f:converter  converterId=&quot;javax.faces.Integer&quot;/>  </h:inputText> <h:inputText id=&quot;inputId&quot; value=&quot;#{someBean.someProperty}&quot;> <f:convertNumber maxFractionDigits=&quot;2&quot; groupingUsed=&quot;true&quot; currencySymbol=&quot;$&quot; maxIntegerDigits=&quot;7&quot; type=&quot;currency&quot;/> </h:inputText> Number converter has its own tag
Custom Converters ,[object Object],[object Object],[object Object],[object Object],[object Object]
Custom Converter Implementation ,[object Object],[object Object],[object Object]
Using attribute  converter ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],<h:inputText id=&quot;phoneNumber&quot; value=&quot;#{bb.pnumber}&quot; converter=&quot; PNConverter &quot;>
Using  <f:converter>  tag ,[object Object],[object Object],<converter> <converter-id> com.corejsf.CreditCard </converter-id> <converter-class> com.corejsf.CreditCardConverter </converter-class> </converter> <h:outputText value=&quot;#{msgs.creditCard}&quot;/> <h:inputText id=&quot;card&quot; label=&quot;#{msgs.creditCard}&quot; value=&quot;#{payment.card}&quot;> <f:converter converterId=&quot; com.corejsf.CreditCard &quot;/> </h:inputText> <h:message for=&quot;card&quot; styleClass=&quot;errorMessage&quot;/>
Live Demo Phone Number Converter
Global Converter registration ,[object Object],<converter> <converter-for-class>  demosjsf.PhoneNumber </converter-for-class> <converter-class> demosjsf.PhoneNumberConverter </converter-class> </converter>
Resource Bundles
Resource bundles ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resource bundles ,[object Object],[object Object],[object Object],<application> <resource-bundle> <base-name>bundle.messages</base-name> <var> msg </var> </resource-bundle> </application>
Using resource bundles ,[object Object],[object Object],[object Object],<h:outputText value=&quot;#{ msg .someMessageKey}&quot;/> someMessageKey=some message otherMessageKey=Here is another message
Message bundles ,[object Object],[object Object],[object Object],<application> <locale-config> <default-locale>en_US</default-locale> <supported-locale>bg_BG</supported-locale> </locale-config> <message-bundle>bundle.messages</message-bundle> </application>
Using message bundles in pages ,[object Object],[object Object],[object Object],[object Object],<f:loadBundle var=&quot;msg&quot; basename=&quot;bundles.Messages&quot; />
Using message bundles in the code ,[object Object],public class FacesBundlesUtils { public static String getMessage( String key, Object[] params){ FacesContext facesContext =  FacesContext.getCurrentInstance(); Locale locale = facesContext.getViewRoot().getLocale(); String bundleName =  facesContext.getApplication().getMessageBundle(); String message = null; try { ResourceBundle bundle = ResourceBundle .getBundle(bundleName, locale); message = bundle.getString(key); // Example Continues...
Using message bundles in the code (2) if (params != null && params.length > 0) { MessageFormat mf = new MessageFormat( message, locale); message =  mf.format(params, new StringBuffer(), null).toString(); }  } catch (MissingResourceException e) { message = &quot;???&quot; + key + &quot;???&quot;; } return message; } public static String getMessage(String key) { return getMessage(key, new Object[] {}); } } String detailedUCNMessage = FacesBundlesUtils.getMessage( DETAILED_MESSAGE_KEY, ucnStringValue); ,[object Object]
Live Demo i18n with Resource Bundles
Detailed Overview Request Lifecycle
Request Lifecycle - scheme
Phase 1: Restore View ,[object Object],[object Object],[object Object],[object Object],[object Object]
Initial And Postback Requests ,[object Object],[object Object],[object Object],[object Object],[object Object]
Phase 2:  Apply Request Values ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Phase 3: Process Validation ,[object Object],[object Object],[object Object],[object Object],[object Object]
Phase 4: Update Model Values ,[object Object],[object Object],[object Object],[object Object]
Phase 5: Invoke Application ,[object Object],[object Object],[object Object],[object Object]
Phase 6: Render Response ,[object Object],[object Object],[object Object],[object Object],[object Object]
Skipping to  Render Response ,[object Object]
JavaServer Faces Questions?
Problems ,[object Object],[object Object],[object Object],[object Object]

Contenu connexe

Tendances (20)

JSP - Java Server Page
JSP - Java Server PageJSP - Java Server Page
JSP - Java Server Page
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
 
JSP Error handling
JSP Error handlingJSP Error handling
JSP Error handling
 
Jsp
JspJsp
Jsp
 
Jsp element
Jsp elementJsp element
Jsp element
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Servlet and jsp interview questions
Servlet and jsp interview questionsServlet and jsp interview questions
Servlet and jsp interview questions
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
 
Spring MVC 3.0 Framework
Spring MVC 3.0 FrameworkSpring MVC 3.0 Framework
Spring MVC 3.0 Framework
 
Implicit objects advance Java
Implicit objects advance JavaImplicit objects advance Java
Implicit objects advance Java
 
JSP
JSPJSP
JSP
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
JSP Directives
JSP DirectivesJSP Directives
JSP Directives
 
Jsp sasidhar
Jsp sasidharJsp sasidhar
Jsp sasidhar
 
Spring MVC Annotations
Spring MVC AnnotationsSpring MVC Annotations
Spring MVC Annotations
 
Jsf2.0 -4
Jsf2.0 -4Jsf2.0 -4
Jsf2.0 -4
 
Jsp presentation
Jsp presentationJsp presentation
Jsp presentation
 
Java server pages
Java server pagesJava server pages
Java server pages
 

En vedette

WEB PAGE DESIGN USING HTML
WEB PAGE DESIGN USING HTMLWEB PAGE DESIGN USING HTML
WEB PAGE DESIGN USING HTMLSneha Mukherjee
 
Web technology practical list
Web technology practical listWeb technology practical list
Web technology practical listdesaipratu10
 
Introduction to html
Introduction to htmlIntroduction to html
Introduction to htmlvikasgaur31
 
JMS Introduction
JMS IntroductionJMS Introduction
JMS IntroductionAlex Su
 
The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013Matt Raible
 
Creating Web Sites with HTML and CSS
Creating Web Sites with HTML and CSSCreating Web Sites with HTML and CSS
Creating Web Sites with HTML and CSSBG Java EE Course
 
Practical file on web technology(html)
Practical file on web technology(html)Practical file on web technology(html)
Practical file on web technology(html)RAJWANT KAUR
 
Introduction to WebSockets
Introduction to WebSocketsIntroduction to WebSockets
Introduction to WebSocketsGunnar Hillert
 
JMS - Java Messaging Service
JMS - Java Messaging ServiceJMS - Java Messaging Service
JMS - Java Messaging ServicePeter R. Egli
 
Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Matt Raible
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web SocketsFahad Golra
 
Lecture 2: Servlets
Lecture 2:  ServletsLecture 2:  Servlets
Lecture 2: ServletsFahad Golra
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Fahad Golra
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 

En vedette (20)

Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
 
JSF 2.2
JSF 2.2JSF 2.2
JSF 2.2
 
WEB PAGE DESIGN USING HTML
WEB PAGE DESIGN USING HTMLWEB PAGE DESIGN USING HTML
WEB PAGE DESIGN USING HTML
 
Web technology practical list
Web technology practical listWeb technology practical list
Web technology practical list
 
Introduction to html
Introduction to htmlIntroduction to html
Introduction to html
 
JMS Introduction
JMS IntroductionJMS Introduction
JMS Introduction
 
JSP Custom Tags
JSP Custom TagsJSP Custom Tags
JSP Custom Tags
 
The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013
 
Creating Web Sites with HTML and CSS
Creating Web Sites with HTML and CSSCreating Web Sites with HTML and CSS
Creating Web Sites with HTML and CSS
 
Practical file on web technology(html)
Practical file on web technology(html)Practical file on web technology(html)
Practical file on web technology(html)
 
Introduction to WebSockets
Introduction to WebSocketsIntroduction to WebSockets
Introduction to WebSockets
 
The HTML5 WebSocket API
The HTML5 WebSocket APIThe HTML5 WebSocket API
The HTML5 WebSocket API
 
HTML practicals
HTML practicals HTML practicals
HTML practicals
 
JMS - Java Messaging Service
JMS - Java Messaging ServiceJMS - Java Messaging Service
JMS - Java Messaging Service
 
Domain object model
Domain object modelDomain object model
Domain object model
 
Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
Lecture 2: Servlets
Lecture 2:  ServletsLecture 2:  Servlets
Lecture 2: Servlets
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 

Similaire à Java Server Faces (JSF) - advanced

JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)Roger Kitain
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVCRichard Paul
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSFSoftServe
 
ASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationEyal Vardi
 
Devoxx 09 (Belgium)
Devoxx 09 (Belgium)Devoxx 09 (Belgium)
Devoxx 09 (Belgium)Roger Kitain
 
Rc085 010d-vaadin7
Rc085 010d-vaadin7Rc085 010d-vaadin7
Rc085 010d-vaadin7Cosmina Ivan
 
Validation in Jakarta Struts 1.3
Validation in Jakarta Struts 1.3Validation in Jakarta Struts 1.3
Validation in Jakarta Struts 1.3Ilio Catallo
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc trainingicubesystem
 
Entity Manager
Entity ManagerEntity Manager
Entity Managerpatinijava
 
Krazykoder struts2 annotations
Krazykoder struts2 annotationsKrazykoder struts2 annotations
Krazykoder struts2 annotationsKrazy Koder
 
Auto fac mvc以及進階應用(一)
Auto fac mvc以及進階應用(一)Auto fac mvc以及進階應用(一)
Auto fac mvc以及進階應用(一)LearningTech
 
Java EE 7 Recipes
Java EE 7 RecipesJava EE 7 Recipes
Java EE 7 RecipesJosh Juneau
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web ToolkitsYiguang Hu
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XMLdiongillard
 
Tech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM WorkflowsTech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM Workflows51 lecture
 

Similaire à Java Server Faces (JSF) - advanced (20)

JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
 
ASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 Validation
 
Os Johnson
Os JohnsonOs Johnson
Os Johnson
 
Devoxx 09 (Belgium)
Devoxx 09 (Belgium)Devoxx 09 (Belgium)
Devoxx 09 (Belgium)
 
Rc085 010d-vaadin7
Rc085 010d-vaadin7Rc085 010d-vaadin7
Rc085 010d-vaadin7
 
2310 b 07
2310 b 072310 b 07
2310 b 07
 
Validation in Jakarta Struts 1.3
Validation in Jakarta Struts 1.3Validation in Jakarta Struts 1.3
Validation in Jakarta Struts 1.3
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc training
 
Entity Manager
Entity ManagerEntity Manager
Entity Manager
 
Ejb6
Ejb6Ejb6
Ejb6
 
Krazykoder struts2 annotations
Krazykoder struts2 annotationsKrazykoder struts2 annotations
Krazykoder struts2 annotations
 
Auto fac mvc以及進階應用(一)
Auto fac mvc以及進階應用(一)Auto fac mvc以及進階應用(一)
Auto fac mvc以及進階應用(一)
 
Java EE 7 Recipes
Java EE 7 RecipesJava EE 7 Recipes
Java EE 7 Recipes
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
 
Automated Testing Of Web Applications Using XML
Automated  Testing Of  Web  Applications Using  XMLAutomated  Testing Of  Web  Applications Using  XML
Automated Testing Of Web Applications Using XML
 
JSF.pptx
JSF.pptxJSF.pptx
JSF.pptx
 
Tech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM WorkflowsTech_Implementation of Complex ITIM Workflows
Tech_Implementation of Complex ITIM Workflows
 

Plus de BG Java EE Course (20)

JSTL
JSTLJSTL
JSTL
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
CSS
CSSCSS
CSS
 
HTML: Tables and Forms
HTML: Tables and FormsHTML: Tables and Forms
HTML: Tables and Forms
 
HTML Fundamentals
HTML FundamentalsHTML Fundamentals
HTML Fundamentals
 
WWW and HTTP
WWW and HTTPWWW and HTTP
WWW and HTTP
 
JavaScript and jQuery Fundamentals
JavaScript and jQuery FundamentalsJavaScript and jQuery Fundamentals
JavaScript and jQuery Fundamentals
 
Processing XML with Java
Processing XML with JavaProcessing XML with Java
Processing XML with Java
 
Introduction to XML
Introduction to XMLIntroduction to XML
Introduction to XML
 
Introduction to-sql
Introduction to-sqlIntroduction to-sql
Introduction to-sql
 
Introduction to-RDBMS-systems
Introduction to-RDBMS-systemsIntroduction to-RDBMS-systems
Introduction to-RDBMS-systems
 
Basic data-structures-v.1.1
Basic data-structures-v.1.1Basic data-structures-v.1.1
Basic data-structures-v.1.1
 
Basic input-output-v.1.1
Basic input-output-v.1.1Basic input-output-v.1.1
Basic input-output-v.1.1
 
Strings v.1.1
Strings v.1.1Strings v.1.1
Strings v.1.1
 
Object-oriented concepts
Object-oriented conceptsObject-oriented concepts
Object-oriented concepts
 
Inheritance and Polymorphism
Inheritance and PolymorphismInheritance and Polymorphism
Inheritance and Polymorphism
 
Defining classes-and-objects-1.0
Defining classes-and-objects-1.0Defining classes-and-objects-1.0
Defining classes-and-objects-1.0
 
Algorithms with-java-advanced-1.0
Algorithms with-java-advanced-1.0Algorithms with-java-advanced-1.0
Algorithms with-java-advanced-1.0
 
Algorithms with-java-1.0
Algorithms with-java-1.0Algorithms with-java-1.0
Algorithms with-java-1.0
 
Methods intro-1.0
Methods intro-1.0Methods intro-1.0
Methods intro-1.0
 

Java Server Faces (JSF) - advanced

Notes de l'éditeur

  1. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  2. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  3. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  4. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  5. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  6. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  7. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  8. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  9. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  10. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  11. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  12. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##
  13. * (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.* ##