Because we don't want to have different code for different places.

E.g.

String text = GWT.create(MyMessages.class).myText();

This code fails if you run it on the server side.

What we want is something like Messages.get().myText() which runs on
both the client, server and test cases, but uses the appropriate
method of getting the messages, e.g. GWT.create, a Proxy or
ResourceBundle or whatever.

Unless I'm missing something?

Joe

On Aug 18, 1:22 am, KenJi_getpowered <mikael.k...@gmail.com> wrote:
> Why can't you just use resource bundle to get messages?
>
> On 17 août, 10:49, Joe Cole <profilercorporat...@gmail.com> wrote:
>
>
>
> > What we do is use this code pattern:
>
> > public interface IMessages {
> >    public MyMessages get(); // your messages interface}
>
> > public class Messages {
> >    private static IMessages messages;
> >    public static MyMessages get() { return messages.get(); }
> >    public static void set(IMessages messages) //etc
>
> > }
>
> > Then in our server side initialisation we use:
>
> > ServerMessages implements IMessages {
> >     public MyMessages get(){
> >                 // note, basically pseudocode
> >                 Properties properties = new Properties();
> >                 InputStream in = // find yours
> >                 properties.load(in);
> >                 return (MyMessages)
> > Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]
> > { MyMessages.class },
> >                                 new GWTMessageProxy(properties));
> >     }
>
> > }
>
> > public class GWTMessageProxy implements InvocationHandler {
>
> >         private final Properties properties;
>
> >         public GWTMessageProxy(Properties properties) {
> >                 super();
> >                 this.properties = properties;
> >         }
>
> >         public Object invoke(Object proxy, Method method, Object[] args)
> > throws Throwable {
> >                 String property = 
> > String.valueOf(properties.get(method.getName()));
> >                 if (args != null && args.length > 0) {
> >                         // we have a messages class...
> >                         return MessageFormat.format(property, args);
> >                 }
> >                 return property;
> >         }
>
> > }
>
> > When you initialize your client side system, simply initialize your
> > messages with a client-side-only version that uses gwt localization.
> > Similarly, your tests probably need a different setup method, so just
> > initialise a custom class for that as well. It's kind of like manual
> > guice, but it doesn't have to be done that often so isn't a big deal.
>
> > This pattern works for everything, so we use it for NumberFormats &
> > DateFormatting and all sorts of other code that need to be shared
> > between client, server, tests etc.
>
> > If anyone has any better ideas please sing out!
>
> > Joe
> > On Aug 17, 7:20 am, Casey <j.casey.one...@gmail.com> wrote:
>
> > > Does anyone know if with Google Web Toolkit there is an easy way to
> > > reuse your client size localization files (constants and messages) in
> > > the server side code? I think in GWT 1.6 or 1.8 you could actually
> > > call the same GWT localization code on the server side that you called
> > > on the client side. I just upgraded from 1.6 to 2.0 and all of a
> > > sudden I'm receiving the following message: ERROR: GWT.create() is
> > > only usable in client code! That makes sense to me but there must be
> > > an easy way to reuse your Constant and Message files on the server.
> > > It's been awhile since I've opened this project but I'm pretty sure
> > > that this was working before. Thanks in advance.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-tool...@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to