2012 Marty Hall customized Java EE Training: Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful WEB Services, hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
54 views14 pages
05 Properties Files
2012 Marty Hall customized Java EE Training: Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful WEB Services, hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14
2012 Marty Hall
Customized Java EE Training: http://courses.coreservlets.com/
Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. Using Properties Files (Resource Bundles) in JSF 3 Originals of Slides and Source Code for Examples: http://www.coreservlets.com/JSF-Tutorial/ This somewhat old tutorial covers JSF 1, and is left online for those maintaining existing projects. All new projects should use JSF 2, which is both simpler and more powerful. See http://www.coreservlets.com/JSF-Tutorial/jsf2/. 2012 Marty Hall Customized Java EE Training: http://courses.coreservlets.com/ Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. For live training on JSF 1 or 2, please see courses at http://courses.coreservlets.com/. Taught by the author of Core Servlets and JSP, More Servlets and JSP, and this tutorial. Available at public venues, or customized versions can be held on-site at your organization. Courses developed and taught by Marty Hall JSF 2, PrimeFaces, servlets/JSP, Ajax, jQuery, Android development, Java 6 or 7 programming, custom mix of topics Ajax courses can concentrate on 1 library (jQuery, Prototype/Scriptaculous, Ext-JS, Dojo, etc.) or survey several Courses developed and taught by coreservlets.com experts (edited by Marty) Spring, Hibernate/JPA, EJB3, GWT, Hadoop, SOAP-based and RESTful Web Services Contact [email protected] for details Agenda Loading properties files Simple messages Parameterized messages Internationalized messages 5 2012 Marty Hall Customized Java EE Training: http://courses.coreservlets.com/ Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. Simple Messages 6 Displaying Fixed Strings 1. Create a .properties file Contains simple keyName=value pairs Must be deployed to WEB-INF/classes In Eclipse, this means you put it in src folder 2. Load file with f:loadBundle basename gives base file name var gives scoped variable (Map) that will hold results Relative to WEB-INF/classes, .properties assumed E.g., for WEB-INF/classes/messages.properties <f:loadBundle basename="messages" var="msgs"/> E.g., for WEB-INF/classes/package1/test.properties <f:loadBundle basename="package1.test" var="msgs"/> 3. Output messages using normal EL #{msgs.keyName} 7 WEB-INF/classes/ messages1.properties title=Registration text=Please enter your first name, last name, and email address. (all on one line) firstNamePrompt=Enter first name lastNamePrompt=Enter last name emailAddressPrompt=Enter email address buttonLabel=Register Me 8 signup1.jsp (.faces) <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <f:view> <f:loadBundle basename="messages1" var="msgs"/> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE> <h:outputText value="#{msgs.title}"/> </TITLE> <LINK REL="STYLESHEET" HREF="./css/styles.css" TYPE="text/css"> </HEAD> <BODY> <CENTER> <TABLE BORDER=5> <TR><TH CLASS="TITLE"> <h:outputText value="#{msgs.title}"/></TH></TR> </TABLE> <BR> <h:outputText value="#{msgs.text}"/> <P> 9 signup1.jsp (.faces), Cont. <h:form> <h:outputText value="#{msgs.firstNamePrompt}"/>: <h:inputText value="#{person.firstName}"/> <BR> <h:outputText value="#{msgs.lastNamePrompt}"/>: <h:inputText value="#{person.lastName}"/> <BR> <h:outputText value="#{msgs.emailAddressPrompt}"/>: <h:inputText value="#{person.emailAddress}"/> <BR> <h:commandButton value="#{msgs.buttonLabel}" action="#{person.doRegistration}"/> </h:form> </CENTER></BODY></HTML> </f:view> 10 signup1.faces: Result 11 2012 Marty Hall Customized Java EE Training: http://courses.coreservlets.com/ Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. Parameterized Messages 12 Parameterizing Strings 1. Create a .properties file in/under WEB-INF/classes Values contain {0}, {1}, {2}, etc. E.g., someName=blah {0} blah {1} Warning: MyFaces bug prevents single quotes in values 2. Load file with f:loadBundle as before basename gives base file name var gives scoped variable (Map) that will hold results 3. Output messages using h:outputFormat value gives base message nested f:param gives substitution values E.g.: <h:outputFormat value="#{msgs.someName}"> <f:param value="value for 0 th entry"/> <f:param value="value for 1 st entry"/> </h:outputFormat> 13 messages2.properties title=Registration firstName=first name lastName=last name emailAddress=email address text=Please enter your {0}, {1}, and {2}. prompt=Enter {0} buttonLabel=Register Me 14 signup2.jsp (.faces) <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <f:view locale="#{facesContext.externalContext.requestLocale}"> <f:loadBundle basename="messages2" var="msgs"/> ... <TABLE BORDER=5> <TR><TH CLASS="TITLE"> <h:outputText value="#{msgs.title}"/></TH></TR> </TABLE> <BR> <h:outputFormat value="#{msgs.text}"> <f:param value="#{msgs.firstName}"/> <f:param value="#{msgs.lastName}"/> <f:param value="#{msgs.emailAddress}"/> </h:outputFormat> <P> <h:form> <h:outputFormat value="#{msgs.prompt}"> <f:param value="#{msgs.firstName}"/> </h:outputFormat>: <h:inputText value="#{person.firstName}"/> 15 signup2.jsp (.faces), Cont. <BR> <h:outputFormat value="#{msgs.prompt}"> <f:param value="#{msgs.lastName}"/> </h:outputFormat>: <h:inputText value="#{person.lastName}"/> <BR> <h:outputFormat value="#{msgs.prompt}"> <f:param value="#{msgs.emailAddress}"/> </h:outputFormat>: <h:inputText value="#{person.emailAddress}"/> <BR> <h:commandButton value="#{msgs.buttonLabel}" action="#{person.doRegistration}"/> </h:form> </CENTER></BODY></HTML> </f:view> 16 signup2.faces: Result 17 2012 Marty Hall Customized Java EE Training: http://courses.coreservlets.com/ Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. Internationalized Messages 18 Localizing Strings 1. Create multiple similarly named .properties files blah.properties, blah_es.properties, blah_es_mx.properties 2. Supply locale argument to f:view <f:view locale="#{facesContext.externalContext.requestLocale}"> Determines locale from browser language settings Can also set the Locale based on user input locale="#{settings.selectedLocale}" See event-handler section for best approach 3. Load file with f:loadBundle as before basename gives base file name Version matching Locale will be used automatically! var gives scoped variable (Map) that will hold results 4. Output messages using h:outputFormat or h:outputText Same as before 19 messages2.properties title=Registration firstName=first name lastName=last name emailAddress=email address text=Please enter your {0}, {1}, and {2}. prompt=Enter {0} buttonLabel=Register Me 20 messages2_es.properties title=Registro firstName=primer nombre lastName=apellido emailAddress=direccin de email text=Incorpore por favor su {0}, {1}, y {2}. prompt=Incorpore {0} buttonLabel=Coloqeme 21 messages2_fr.properties title=Enregistrement firstName=prnom lastName=nom emailAddress=adresse lectronique text=Merci de entrer votre {0}, {1}, et {2}. prompt=Entrez votre {0} buttonLabel=Enregistrez moi 22 signup2.jsp (.faces) <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <f:view locale="#{facesContext.externalContext.requestLocale}"> <f:loadBundle basename="messages2" var="msgs"/> ... <TABLE BORDER=5> <TR><TH CLASS="TITLE"> <h:outputText value="#{msgs.title}"/></TH></TR> </TABLE> <BR> <h:outputFormat value="#{msgs.text}"> <f:param value="#{msgs.firstName}"/> <f:param value="#{msgs.lastName}"/> <f:param value="#{msgs.emailAddress}"/> </h:outputFormat> <P> <h:form> <h:outputFormat value="#{msgs.prompt}"> <f:param value="#{msgs.firstName}"/> </h:outputFormat>: <h:inputText value="#{person.firstName}"/> ... 23 Setting Language Preferences in Browsers Internet Explorer Tools, Internet Options, Languages Click Add, select language, OK Move to top of list using Move Up Firefox Tools, Options, Advanced, General, Languages Click Add, select language, Add Move to top of list using Move Up 24 signup2.faces: Result (Browser Language English) 25 signup2.faces: Result (Browser Language Spanish) 26 signup2.faces: Result (Browser Language French) 27 Summary Deploy one or more .properties file to WEB-INF/classes In Eclipse, you put .properties file in src folder, and it gets deployed to WEB-INF/classes automatically Load the file with f:loadBundle Output values using normal EL h:outputText (and a few others) for simple values h:outputFormat for parameterized values Set views locale if I18N needed Extract it from browser setting or user setting Automatically loads locale-specific resource bundle 28 2012 Marty Hall Customized Java EE Training: http://courses.coreservlets.com/ Java, JSF 2, PrimeFaces, Servlets, JSP, Ajax, jQuery, Spring, Hibernate, RESTful Web Services, Hadoop, Android. Developed and taught by well-known author and developer. At public venues or onsite at your location. Questions? 29