Ok, thanks, I'll try that! I already tried the following in my class that
extends AbstractMessages:

@Inject
private HttpServletRequest request;

@ApplicationState
private User user;

Which didn't work, both were null. But what your saying is that these
objects are not possible to inject in this scope, but RequestGlobals is, so
the following will work?

@Inject
private RequestGlobals requestGlobals

Regards
Inge

On Mon, Aug 25, 2008 at 3:57 PM, Hannes Heijkenskjöld <
[EMAIL PROTECTED]> wrote:

> Hi Inge,
>
> glad to have been able to help you!
>
> For your current problem, I can see two immediate solutions.
>
> 1. Store your user object as an ASO and inject ApplicationStateManager into
> your Messages implementation. Get the user object instance by calling
> applicationStateManager.get(UserObject.class).
>
> 2. Inject RequestGlobals in your Messages implementation. Then you can get
> the request by calling requestGlobals.getHTTPServletRequest().
>
> I hope this helps
>
> /Hannes
>
> Inge Solvoll skrev:
>
>  Hi, Hannes!
>>
>> I tried your implementation, and it worked right away, I just returned the
>> value "TESTING TESTING" from my DbMessages class that extends Abstract
>> Messages.
>>
>> But, what I need is for the valueForKey(String key) method to be aware of
>> the languageId/customerId of the currently logged in user. In all my other
>> pages, I get this through injecting the request and getting my user object
>> from HttpSession. Alternatively this can be moved to an ASO, but I haven't
>> taken the time to do that yet.
>>
>> I've tried injecting HttpServletRequest and ApplicationState on all the
>> classes listed in the implementation from Hannes, but none of them work
>> (only null values). How can I make information from the current user
>> session
>> available to my AbstractMessages implementation?
>>
>> Regards
>>
>> Inge
>>
>> On Wed, Apr 16, 2008 at 10:22 AM, Hannes Heijkenskjöld <
>> [EMAIL PROTECTED]> wrote:
>>
>>  Great!
>>>
>>> Glad I could help you. :-)
>>>
>>> /Hannes
>>>
>>> Michael Capper skrev:
>>>
>>>  Thanks Hannes!
>>>
>>>> I tried the route with the Decorator once, and ended up having to write
>>>> some
>>>> java-code into the interceptor via the BodyBuilder .... 'twas not nice.
>>>>
>>>> Your example worked great, i only had to pass some more Services
>>>> (AssetSource to get the URLs, my ProjectContextProvider to get the
>>>> ResourceBundles for my text) into the build-Method in AppModule, then i
>>>> could return the value for a Message-Key from the bundles, or if not
>>>> existant, from the fallbackMessages.
>>>>
>>>> Cheers,
>>>> Mike
>>>>
>>>>
>>>> Hannes Heijkenskjöld wrote:
>>>>
>>>>  Hi
>>>>>
>>>>> I have recently wondered about the same, and have now built something
>>>>> that after much trial and error now works.
>>>>>
>>>>> Basically, I have created a Messages implementation that wraps both a
>>>>> tapestry Messages object and our own database messages. If a message is
>>>>> not
>>>>> found in our database, the default Messages object is queried.
>>>>>
>>>>> To get Tapestry to use my Messages implementation i had to decorate the
>>>>> ComponentMessagesSource (and ValidationMessagesSource), since it is not
>>>>> possible to replace the one in Tapestry. I think I read about
>>>>> decorating
>>>>> services here:
>>>>> http://tapestry.apache.org/tapestry5/tapestry-ioc/decorator.html and
>>>>> on
>>>>> the mailing list.
>>>>>
>>>>> My messages source service doesn't implement the
>>>>> ComponentMessagesSource
>>>>> interface. I use an interception object for that. Hopefully you can
>>>>> understand how it works from my example code below:
>>>>>
>>>>> public class CommonsMessages extends AbstractMessages {
>>>>>
>>>>>    private Messages fallbackMessages;
>>>>>
>>>>>    protected String valueForKey(final key) {
>>>>>       ... logic to get key from db, use fallbackMessages as fallback...
>>>>>    }
>>>>>
>>>>> }
>>>>>
>>>>> -----
>>>>>
>>>>> public class CommonsMessagesSource {
>>>>>
>>>>>    public Messages getMessages(Locale locale, Messages
>>>>> fallbackMessages)
>>>>> {
>>>>>       ... code that creates a CommonsMessages object, with
>>>>> fallbackMessages ...
>>>>>    }
>>>>> }
>>>>>
>>>>> ----
>>>>>
>>>>> // This is the decorating class
>>>>> public class CommonsComponentMessagesSourceInterceptor implements
>>>>>    ComponentMessagesSource {
>>>>>
>>>>>    private final CommonsMessagesSource service;
>>>>>    private final ComponentMessagesSource delegate;
>>>>>
>>>>>    public CommonsComponentMessagesSourceInterceptor
>>>>>        (CommonsMessagesSource service, ComponentMessagesSource
>>>>> delegate)
>>>>>    {
>>>>>        this.service = service;
>>>>>        this.delegate = delegate;
>>>>>    }
>>>>>
>>>>>    public Messages getMessages(ComponentModel componentModel, Locale
>>>>> locale) {
>>>>>
>>>>>        return service.getMessages(locale,
>>>>>            delegate.getMessages(componentModel, locale));
>>>>>    }
>>>>>
>>>>>    // Not sure about how I should handle this one
>>>>>    public void addInvalidationListener(
>>>>>        InvalidationListener invalidationlistener) {
>>>>>        delegate.addInvalidationListener(invalidationlistener);
>>>>>    }
>>>>> }
>>>>>
>>>>> ---
>>>>>
>>>>> In AppModule.java:
>>>>>
>>>>>    // Method for instantiating and configuring the custom messages
>>>>> source
>>>>>    public static CommonsMessagesSource buildCommonsMessagesSource()
>>>>>    {
>>>>>        CommonsMessagesSource messagesSource = new
>>>>> CommonsMessagesSource();
>>>>>        return messagesSource;
>>>>>    }
>>>>>
>>>>>    // Method that decorates the default MessagesSource using the
>>>>> interceptor class
>>>>>    @Match("ComponentMessagesSource")
>>>>>    public static ComponentMessagesSource
>>>>> decorateComponentMessagesSource
>>>>>         (Object delegate, CommonsMessagesSource service)
>>>>>     {
>>>>>         return new CommonsComponentMessagesSourceInterceptor(service,
>>>>> (ComponentMessagesSource)delegate);
>>>>>     }
>>>>>
>>>>> This is how I got it to work, there may be other ways ofcourse. There
>>>>> might even be better ways :-)
>>>>>
>>>>> Cheers,
>>>>> /Hannes
>>>>>
>>>>> Michael Capper skrev:
>>>>>
>>>>>  Summary: How do I include additional localization-key/values-pairs in
>>>>>> my
>>>>>> global messages-catalog, originating from some app_<lang>.properties
>>>>>> or
>>>>>> from
>>>>>> a database?
>>>>>>
>>>>>> Hi,
>>>>>> I'd like to extend the Hash-Table containing the message-keys and
>>>>>> message-values used in my app. The app_en.properties provides the
>>>>>> basic
>>>>>> global localization data, but I need even more data, which is spead
>>>>>> about
>>>>>> in
>>>>>> other .properties-files or even in a Database. What I'd like to do
>>>>>> would
>>>>>> be
>>>>>> to read in the data somewhere, and pass it on to the Messages(or
>>>>>> ResourceBundle) somehow, so when I @Inject the Messages into a
>>>>>> page/component or use the 'message:' binding, the extra localization
>>>>>> is
>>>>>> available at a root level.
>>>>>>
>>>>>> Thanks for any help or pointers,
>>>>>> Mike
>>>>>>
>>>>>>  ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>  ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to