Author: rafabene
Date: Thu Jun 12 14:51:40 2014
New Revision: 1602186

URL: http://svn.apache.org/r1602186
Log:
DELTASPIKE-227
documentation for minimal type-safe messages

Modified:
    deltaspike/site/trunk/content/core.mdtext
    deltaspike/site/trunk/content/jsf.mdtext

Modified: deltaspike/site/trunk/content/core.mdtext
URL: 
http://svn.apache.org/viewvc/deltaspike/site/trunk/content/core.mdtext?rev=1602186&r1=1602185&r2=1602186&view=diff
==============================================================================
--- deltaspike/site/trunk/content/core.mdtext (original)
+++ deltaspike/site/trunk/content/core.mdtext Thu Jun 12 14:51:40 2014
@@ -319,7 +319,7 @@ The following implementation uses the ke
     org/apache/deltaspike/example/message/SimpleMessage_de.properties
     ...
 
-    //content (as usual in message bundle files:
+    //content (as usual in message bundle files):
     welcome_to_deltaspike=Welcome to DeltaSpike
 
 The following implementation uses the key `welcome_to_deltaspike` to do a 
lookup in a custom message bundle known by `CustomMessageResolver`.

Modified: deltaspike/site/trunk/content/jsf.mdtext
URL: 
http://svn.apache.org/viewvc/deltaspike/site/trunk/content/jsf.mdtext?rev=1602186&r1=1602185&r2=1602186&view=diff
==============================================================================
--- deltaspike/site/trunk/content/jsf.mdtext (original)
+++ deltaspike/site/trunk/content/jsf.mdtext Thu Jun 12 14:51:40 2014
@@ -24,7 +24,7 @@ Notice:    Licensed to the Apache Softwa
 ## Intro
 
 ### Historic Considerations
-Until the end of the 1990s web browsers are usually single threaded and only 
had one window. But in the last years browsers supporting multiple windows or 
even tab became the standard. Since those days lots of efforts went into 
uniquely identifying a single browser window on the server side. Sadly browser 
windows still lack of a native windowId, thus maintaining web application data 
in @SessionScoped backing beans is still used in most of the cases. 
+Until the end of the 1990s web browsers are usually single threaded and only 
had one window. But in the last years browsers supporting multiple windows or 
even tab became the standard. Since those days lots of efforts went into 
uniquely identifying a single browser window on the server side. Sadly browser 
windows still lack of a native windowId, thus maintaining web application data 
in @SessionScoped backing beans is still used in most of the cases.
 
 ###How JSF-2 changed the world
 
@@ -90,7 +90,7 @@ If it's not matching, the view will be r
 
 ##### Disadvantage
 
-  - It could happen that 2 tabs will share the same windowId for 1 request 
because the `LAZY` mode will check lazily, after rendering the view, if the 
windowId matches the `window.name`. Therefore it could happen that 
@ViewAccessScoped or other scopes will unintentionally be destroyed. 
+  - It could happen that 2 tabs will share the same windowId for 1 request 
because the `LAZY` mode will check lazily, after rendering the view, if the 
windowId matches the `window.name`. Therefore it could happen that 
@ViewAccessScoped or other scopes will unintentionally be destroyed.
 
 #### Workflow example
 
@@ -235,6 +235,63 @@ Furthermore, the managed-bean annotation
 
 All these annotations are mapped automatically. So you won't face issues, if 
you import a JSF 2 annotation instead of the corresponding CDI annotation.
 
+# Integration with DeltaSpike type-safe messages
+
+You can use [DeltaSpike type-safe messages](core.html#messages-i18n) with JSF 
to provide i18n messages and test to an JSF appplicaton.
+
+JSF module is also capable to use messages provided through <message-bundle> 
in faces-config.xml file. The <message-bundle> element allows you to override 
JSF default messages (Section 2.5.2.4 of the JSF specification contains the 
list of all JSF default messages that could be override.).
+
+You can also use the same file to provide type-safe messages.
+
+Example:
+
+    :::java
+    @MessageBundle
+    public interface SimpleMessage
+    {
+        @MessageTemplate("{welcome_to_deltaspike}")
+        String welcomeToDeltaSpike();
+    }
+
+    @Model
+    public class PageBean
+    {
+
+        @Inject
+        private SimpleMessage messages;
+
+        public void actionMethod(){
+            FacesContext.getCurrentInstance().addMessage(null,new 
FacesMessage(messages.welcomeToDeltaSpike()));
+        }
+
+    }
+
+
+    org.apache.deltaspike.example.message.SimpleMessage
+
+    ->
+
+    org/apache/deltaspike/example/message/SimpleMessage.properties
+    org/apache/deltaspike/example/message/SimpleMessage.properties
+    org/apache/deltaspike/example/message/SimpleMessage_en.properties
+    org/apache/deltaspike/example/message/SimpleMessage_de.properties
+
+    ...
+
+    //content (as usual in message bundle files):
+    welcome_to_deltaspike=Welcome to DeltaSpike
+    //Overrided JSF messages
+    javax.faces.component.UIInput.REQUIRED = {0}: Please enter a value
+
+On faces-config.xml file:
+
+    <faces-config>
+        <application>
+            
<message-bundle>org.apache.deltaspike.example.message.SimpleMessage</message-bundle>
+        </application>
+    </faces-config>
+
+
 # Type-safe View-Configs
 
 ## Intro
@@ -491,7 +548,7 @@ and depending on additional meta-data yo
 
     :::java
     @View(navigation = REDIRECT)
-    interface Pages extends ViewConfig 
+    interface Pages extends ViewConfig
     {
         interface Wizard1 extends Pages
         {
@@ -758,7 +815,7 @@ In case of
     }
 
 it's possible to navigate with `DefaultErrorView.class` instead of hardcoding 
it to `Pages.CustomErrorPage.class`.
-    
+
     :::java
     @Model
     public class PageController
@@ -1008,7 +1065,7 @@ Example - Separated DeltaSpike conversat
     {
         //...
     }
- 
+
     @GroupedConversationScoped
     public class DemoBean3 implements Serializable
     {
@@ -1023,14 +1080,14 @@ Example - Grouped conversation scoped be
 
     :::java
     interface Wizard1 {}
- 
+
     @GroupedConversationScoped
     @ConversationGroup(Wizard1.class)
     public class DemoBean4 implements Serializable
     {
         //...
     }
- 
+
     @GroupedConversationScoped
     @ConversationGroup(Wizard1.class)
     public class DemoBean5 implements Serializable
@@ -1049,7 +1106,7 @@ Example - Injecting a conversation scope
         @Inject
         @ConversationGroup(Group1.class)
         private CustomBean2 demoBean;
- 
+
         @Inject
         @ConversationGroup(Group2.class)
         private CustomBean2 demoBean;
@@ -1062,7 +1119,7 @@ Example - Producer methods which produce
     :::java
     interface Group1 {}
     interface Group2 {}
- 
+
     public class CustomBean2
     {
         @Produces
@@ -1072,7 +1129,7 @@ Example - Producer methods which produce
         {
             return new CustomBean2();
         }
- 
+
         @Produces
         @GroupedConversationScoped
         @ConversationGroup(Group2.class)
@@ -1094,23 +1151,23 @@ Example - Injecting and using the curren
     {
         @Inject
         private GroupedConversation conversation; //injects the conversation 
of DemoBean6 (!= conversation of DemoBean7)
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversation.close();
         }
     }
- 
+
     @GroupedConversationScoped
     public class DemoBean7 implements Serializable
     {
         @Inject
         private GroupedConversation conversation; //injects the conversation 
of DemoBean7 (!= conversation of DemoBean6)
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversation.close();
@@ -1121,16 +1178,16 @@ Example - Injecting and using the explic
 
     :::java
     interface Wizard2 {}
- 
+
     @GroupedConversationScoped
     @ConversationGroup(Wizard2.class)
     public class DemoBean8 implements Serializable
     {
         @Inject
         private GroupedConversation conversation; //injects the conversation 
of Wizard2 (contains DemoBean8 and DemoBean9)
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversation.close();
@@ -1143,9 +1200,9 @@ Example - Injecting and using the explic
     {
         @Inject
         private GroupedConversation conversation; //injects the conversation 
of Wizard2 (contains DemoBean8 and DemoBean9)
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversation.close();
@@ -1160,9 +1217,9 @@ Example - Terminating a grouped conversa
     {
         @Inject
         private GroupedConversationManager conversationManager;
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversationManager.closeConversationGroup(Wizard2.class);  
//closes the conversation of group Wizard2.class
@@ -1177,9 +1234,9 @@ Example - Terminate all conversations:
     {
         @Inject
         private GroupedConversationManager conversationManager;
- 
+
         //...
- 
+
         public void finish()
         {
             this.conversationManager.closeConversations();  //closes all 
existing conversations within the current window (context)
@@ -1198,24 +1255,24 @@ Example - Explicitly listing beans of a 
 
     :::java
     public class MyGroup{}
- 
+
     @GroupedConversationScoped
     @ConversationGroup(MyGroup.class)
     public class BeanA {}
- 
+
     @GroupedConversationScoped
     @ConversationGroup(MyGroup.class)
     public class BeanB {}
- 
+
     @GroupedConversationScoped
     @ConversationGroup(MyGroup.class)
     public class BeanC {}
- 
+
     @ConversationSubGroup(subGroup = {BeanA.class, BeanB.class})
     public class MySubGroup extends MyGroup {}
- 
+
     //or
- 
+
     @ConversationSubGroup(of = MyGroup.class, subGroup = {BeanA.class, 
BeanB.class})
     public class MySubGroup {}
 
@@ -1236,12 +1293,12 @@ Example - Implicit sub-group:
 
     :::java
     public interface Wizard {}
- 
+
     @ConversationSubGroup(of = MyGroup.class, subGroup = Wizard.class)
     public class ImplicitSubGroup
     {
     }
- 
+
     @Named("myWizard")
     @GroupedConversationScoped
     @ConversationGroup(MyGroup.class)
@@ -1249,7 +1306,7 @@ Example - Implicit sub-group:
     {
         //...
     }
- 
+
     this.conversationManager.closeConversationGroup(ImplicitSubGroup.class);
 
 In the listing above all beans which implement the Wizard interface will be 
closed as soon as you close the ImplicitSubGroup.


Reply via email to