You can use a Lazy map as Wrapper to build the keys dynamically.
A Transformer will be called during map access and you can add your prefix to
your key.
This does also work inside tables, lists etc
Sample:
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.map.LazyMap;
public class MessageKeyCreatorBean implements Serializable
{
private Map mLazyMap;
public MessageKeyCreatorBean(){}
public void setTransformer (Object input)
{
String inputString = (String) input;
Transformer keyTransformer = new KeyTransformer(inputString);
this.mLazyMap = LazyMap.decorate(new HashMap(), keyTransformer);
}
public Map getLazyKey()
{
return this.mLazyMap;
}
public Object get(Object key)
{
return this.mLazyMap.get(key);
}
private static class KeyTransformer implements Transformer, Serializable
{
private String mPrefix = null;
public KeyTransformer(String prefix )
{
this.mPrefix = prefix;
}
public Object transform(Object input)
{
return this.mPrefix+input.toString();
}
}
}
Config:
<managed-bean>
<managed-bean-name>myPrefixBean</managed-bean-name>
<managed-bean-class>....MessageKeyCreatorBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>transformer</property-name>
<value>linked</value>
</managed-property>
</managed-bean>
View:
myPrefixBean.lazyKey[bean.type]
Michael
From: [email protected]
[mailto:[email protected]]
Sent: Freitag, 6. März 2009 11:31
To: [email protected]
Subject: Message bundle problem
Hi,
I need to access a message bundle property like so:
<t:outputText value="#{msg['linked.' + bean.type]}" />
Although that syntax doesn't quite work. I've tried a few things. The closest I
got was using a t:aliasBean like
<t:aliasBean alias="#{key}" value="linked.#{bean.type}" />
<t:outputText value="#{msg[key]}" />
This actually works, but problems arise when you stick that into a t:dataList.
Inside the datalist the t:aliasBean doesn't get reevaluated and instead the
property resolver will try and resolve "#{msg[linked.#{bean.type}]} which
doesn't work.
I had a temporary fix which changed the value stored in the bean to include the
"linked." part but that causes problems later with the application logic.
Thanks for any help
Matt