Bonjour je voudrais internationaliser mon application en utilisant la base de données.
Mais j'ai une erreur sur la "Base Name" de la ressource Bundle.Bref je ne sais pas comment le définir sans utiliser les fichiers properties.
voici mon entite pour stocker les messages
Voici ma classe pour recuperer la Resource Bundle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 @Entity @Table(uniqueConstraints ={@UniqueConstraint(name = "cleUnique",columnNames = {"cle","langue"})} ) @NamedQueries({@NamedQuery(name =Messages.BY_LANGUE,query = "SELECT m.cle,m.name FROM Messages m WHERE m.langue=:langue")}) public class Messages implements Serializable { public static final String BY_LANGUE="Messages.BY_LANGUE"; private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String cle; private String name; private String langue; //getter setter }
A note que c;est la variable BASE_NAME qui me pose problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 @Component public class CustomResourceBundle extends ResourceBundle { protected static final String BASE_NAME = "Messages"; protected static final Control DB_CONTROL = new DBControl(); private Map<String, String> messages; public CustomResourceBundle() { setParent(ResourceBundle.getBundle(BASE_NAME, FacesContext.getCurrentInstance().getViewRoot().getLocale(), DB_CONTROL)); } protected CustomResourceBundle(Map<String, String> messages) { this.messages = messages; } @Override protected Object handleGetObject(String key) { return messages != null ? messages.get(key) : parent.getObject(key); } @Override public Enumeration<String> getKeys() { return messages != null ? Collections.enumeration(messages.keySet()) : parent.getKeys(); } protected static class DBControl extends Control { @Inject IMessages messageServices; @Override public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException { String language = locale.getLanguage(); Map<String, String> messages = messageServices.getMessagesByName(language); // Do your JPA thing. The baseName can be used as @NamedQuery name. return new CustomResourceBundle(messages); } } }
enfin voici mon fichier de configurationfaces-config.xml
Voici enfin l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <resource-bundle> <base-name>utils.CustomResourceBundle</base-name> <var>msg</var> </resource-bundle>
Comment faut t-il definir la variable BASE_NAME?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Caused by: java.util.MissingResourceException: Can't find bundle for base name Messages, locale fr_FR at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) ~[na:1.7.0_21] at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) ~[na:1.7.0_21] at java.util.ResourceBundle.getBundle(ResourceBundle.java:841) ~[na:1.7.0_21] at utils.CustomResourceBundle.<init>(CustomResourceBundle.java:37) ~[CustomResourceBundle.class:na] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_21] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_21] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_21] at java.lang.reflect.Constructor.newInstance(Constructor.java:525) ~[na:1.7.0_21] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] ... 59 common frames omitted Caused by: java.lang.NullPointerException: null at utils.CustomResourceBundle$DBControl.newBundle(CustomResourceBundle.java:64) ~[CustomResourceBundle$DBControl.class:na] at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1436) ~[na:1.7.0_21] at java.util.ResourceBundle.findBundle(ResourceBundle.java:1400) ~[na:1.7.0_21] at java.util.ResourceBundle.findBundle(ResourceBundle.java:1354) ~[na:1.7.0_21] at java.util.ResourceBundle.findBundle(ResourceBundle.java:1354) ~[na:1.7.0_21] at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1296) ~[na:1.7.0_21]
Merci d'avance
Partager