public class StringResourceModel extends LoadableDetachableModel<String> implements IComponentAssignedModel<String>
MessageFormat
substitutions. This combination should be
able to solve any dynamic localization requirement that a project has.
The model should be created with four parameters, which are described in detail below:
ComponentStringResourceLoader
. The relative component
may actually be null
if this model is wrapped on assignment (
IComponentAssignedModel
) or when all resource loading is to be done from a global
resource loader. However, we recommend that a relative component is still supplied even in the
latter case in order to 'future proof' your application with regards to changing resource loading
strategies.
null
java.text.MessageFormat
object. Each parameter may be an ordinary Object, in which
case it will be processed by the standard formatting rules associated with
java.text.MessageFormat
. Alternatively, the parameter may be an instance of
IModel
in which case the getObject()
method will be applied prior to
the parameter being passed to the java.text.MessageFormat
. This allows such features
dynamic parameters that are obtained using a PropertyModel
object or even nested
string resource models. Unlike the other parameters listed above this one can not be provided
as constructor parameter but rather using method setParameters(Object...)
.
java.text.MessageFormat
style markup for replacement of parameters. Where a string
resource contains both types of formatting information then the property expression will be
applied first.
Example Bean
In the next examples we will use the following class as bundle model:
public class WeatherStation implements Serializable { private final String name = "Europe's main weather station"; private String currentStatus = "sunny"; private double currentTemperature = 25.7; private String units = "°C"; }
Example 1
In its simplest form, the model can be used as follows:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { add(new Label("username", new StringResourceModel("label.username", this))); } }Where the resource bundle for the page contains the entry
label.username=Username
Example 2
In this example, the resource key is selected based on the evaluation of a property expression:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); add(new Label("weatherMessage", new StringResourceModel("weather.${currentStatus}", this, new Model<WeatherStation>(ws))); } }Which will call the WeatherStation.getCurrentStatus() method each time the string resource model is used and where the resource bundle for the page contains the entries:
weather.sunny=Don't forget sunscreen! weather.raining=You might need an umbrella weather.snowing=Got your skis? weather.overcast=Best take a coat to be safe
Example 3
In this example the found resource string contains a property expression that is substituted via the model:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); add(new Label("weatherMessage", new StringResourceModel("weather.message", this, new Model<WeatherStation>(ws))); } }Where the resource bundle contains the entry
weather.message=Weather station reports that
the temperature is ${currentTemperature} ${units}
Example 4
In this example, the use of substitution parameters is employed to format a quite complex message string. This is an example of the most complex and powerful use of the string resource model:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); IModel<WeatherStation> model = new Model<WeatherStation>(ws); add(new Label("weatherMessage", new StringResourceModel("weather.detail", this) .setParameters( new Date(), new PropertyModel<?>(model, "currentStatus"), new PropertyModel<?>(model, "currentTemperature"), new PropertyModel<?>(model, "units") ) })); } }And where the resource bundle entry is:
weather.detail=The report for {0,date}, shows the temperature as {2,number,###.##} {3} \ and the weather to be {1}
for additional information especially on the component search
order
,
Serialized FormConstructor and Description |
---|
StringResourceModel(String resourceKey)
Creates a new string resource model using the supplied parameter.
|
StringResourceModel(String resourceKey,
Component component)
Creates a new string resource model using the supplied parameters.
|
StringResourceModel(String resourceKey,
Component component,
IModel<?> model)
Creates a new string resource model using the supplied parameters.
|
StringResourceModel(String resourceKey,
IModel<?> model)
Creates a new string resource model using the supplied parameter.
|
Modifier and Type | Method and Description |
---|---|
void |
detach()
Detaches model after use.
|
protected Locale |
getLocale() |
Localizer |
getLocalizer()
Gets the localizer that is being used by this string resource model.
|
protected Object[] |
getParameters()
Gets the Java MessageFormat substitution parameters.
|
protected String |
getResourceKey()
Gets the resource key for this string resource.
|
String |
getString()
Gets the string currently represented by this model.
|
protected String |
getString(Component component) |
protected String |
load()
Gets the string that this string resource model currently represents.
|
StringResourceModel |
setDefaultValue(IModel<String> defaultValue)
Sets the default value if the resource key is not found.
|
StringResourceModel |
setDefaultValue(String defaultValue)
Sets the default value if the resource key is not found.
|
StringResourceModel |
setModel(IModel<?> model)
Sets the model used for property substitutions.
|
void |
setObject(String object)
Manually loads the model with the specified object.
|
StringResourceModel |
setParameters(Object... parameters)
Sets the parameters used for substitution.
|
String |
toString()
This method just returns debug information, so it won't return the localized string.
|
IWrapModel<String> |
wrapOnAssignment(Component component)
This method is called when the component gets its model assigned.
|
getObject, isAttached, of, onAttach, onDetach
public StringResourceModel(String resourceKey, Component component, IModel<?> model)
The relative component parameter should generally be supplied, as without it resources can not be obtained from resource bundles that are held relative to a particular component or page. However, for application that use only global resources then this parameter may be null.
resourceKey
- The resource key for this string resourcecomponent
- The component that the resource is relative tomodel
- The model to use for property substitutionspublic StringResourceModel(String resourceKey, Component component)
The relative component parameter should generally be supplied, as without it resources can not be obtained from resource bundles that are held relative to a particular component or page. However, for application that use only global resources then this parameter may be null.
resourceKey
- The resource key for this string resourcecomponent
- The component that the resource is relative topublic StringResourceModel(String resourceKey, IModel<?> model)
resourceKey
- The resource key for this string resourcemodel
- The model to use for property substitutionspublic StringResourceModel(String resourceKey)
resourceKey
- The resource key for this string resourcepublic IWrapModel<String> wrapOnAssignment(Component component)
IComponentAssignedModel
wrapOnAssignment
in interface IComponentAssignedModel<String>
public StringResourceModel setDefaultValue(IModel<String> defaultValue)
defaultValue
- The default value if the resource key is not found.public StringResourceModel setDefaultValue(String defaultValue)
defaultValue
- The default value as string if the resource key is not found.public StringResourceModel setModel(IModel<?> model)
model
- The model to use for property substitutionspublic StringResourceModel setParameters(Object... parameters)
parameters
- The parameters to substitute using a Java MessageFormat objectpublic Localizer getLocalizer()
public final String getString()
protected Locale getLocale()
public String toString()
toString
in class LoadableDetachableModel<String>
protected Object[] getParameters()
protected final String getResourceKey()
protected final String load()
Note: This method is used only if this model is used directly without assignment to a
component, it is not called by the assignment wrapper returned from
wrapOnAssignment(Component)
.
load
in class LoadableDetachableModel<String>
public final void detach()
IDetachable
detach
in interface IDetachable
detach
in interface IModel<String>
detach
in class LoadableDetachableModel<String>
public void setObject(String object)
LoadableDetachableModel
LoadableDetachableModel.getObject()
will return object
until LoadableDetachableModel.detach()
is called.Copyright © 2006–2022 Apache Software Foundation. All rights reserved.