In the Validating Input lesson, we used the validation framework to verify data submitted from a form. In the Localizing Output lesson, we use move the validation messages to a message resource bundle.
...
The framework associates message resources to classes. To add a message resource for the Login Logon action, we could just name the resource LoginLogon.properties
and set it on the classpath next to the Login Logon Action.
But, most people find it counter-productive to use separate message resource bundles for each class. Instead, many people prefer to add a bundle for an entire package of classes. To do this, simply add a package.properties
file to the package. In our case, it would be the tutorial package.
Code Block | ||||
---|---|---|---|---|
| ||||
requiredstring = $\{getText(fieldName)} is required.
password = Password
username = User Name
|
We also need to make changes to the validator and Login Logon page.
...
As you see a value in resource bundle can also be specified as an expression.
Logon-validation.xml
<message>Username is required</message>
<message key="requiredstring"/>
<message>Password is required</message>
<message key="requiredstring"/>
...
Logon.jsp
<s:textfield label="User Name" name="username"/>
<s:textfield label="%{getText('username')}" name="username"/>
...
- The "key" attribute tells the validator to check for a message resource bundle.
- In the resource bundle, the expression
tells the framework to lookup the field name in the bundle too. This way we can use the same default message for all theNo Format ${getText(fieldName)}
requiredstring
validators. - Likewise, in the text filed, the expression
tells the framework to lookup "password" in the message resources.No Format %{getText('password')}
...
Code Block | ||||
---|---|---|---|---|
| ||||
# ... HelloWorld.message = Struts is up and running ... Missing.message = This feature is under construction. Please try again in the next interationiteration. |
This will work for HelloWorld
since it is already in the tutorial package. But it won't work for the default Missing action, unless we add our own base class for the tutorial package.
...
This feature is under construction. Please try again in the next interationiteration.
<s:text name="Missing.message"/>
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package tutorial; public class HelloWorld extends ExampleSupportTutorialSupport { public static final String MESSAGE = "HelloWorld.message"; public String execute() throws Exception { setMessage(getText(MESSAGE)); return SUCCESS; } // ... } |
...
The framework is internationalized. To localize an application, we add the resource bundles, and update some elements or tags to refer to the bundles instead of static text.
For more, see Localization in the Core Developers Guide.
...