struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nenad Kovacevic" <nkovace...@nbsps.com>
Subject JSTL fmt:message and Struts 2 Tags Handling of MessageProperties
Date Tue, 23 Nov 2010 19:10:45 GMT
I am using both JSTL (reference implementation of 1.2 spec) and struts
2.2.1 in my Web application, and I am noting incompatibilities in the
way JSTL's fmt:message tag and corresponding Struts tags handle i18n. I
have all i18n messages in MessageResources_<locale>.property files. Both
JSTL fmt tags and struts tags use these resource bundles when formatting
strings.

JSTL fmt:message behaviour is to put a string from the
MessageResources_*.property through MessageFormat only if the
fmt:message tag contains a fmt:param element. In that case the message
from the bundle needs to follow MessageFormat syntax (e.g. treat
apostrophe or single quote character as an escape character). 

Otherwise if fmt:message does not have a fmt:param it simply prints out
non-modified message from the bundle to the JspWriter. This means that I
need to escape special characters (like apostrophe and curly braces)
ONLY if the message is parameterized.

 

Implementation of struts tags and ActionSupport#getText methods on the
other side always uses MessageFormat regardless of whether the message
is parameterized or not, and I always have to escape MessageFormat
special characters. 

 

To illustrate this here is an example:

MessageResources.properties:

test.message1 = How are you doin' friend?

test.message2 = How are you doin'' friend?

test.message3 = How are you doin' {0}?

test.message4 = How are you doin'' {0}?

 

and test.jsp:

<strong>JSTL</strong><br>

<fmt:message key="test.message1"/><br>

<fmt:message key="test.message2"/><br>

<fmt:message
key="test.message3"><fmt:param>Joey</fmt:param></fmt:message><br>

<fmt:message
key="test.message4"><fmt:param>Joey</fmt:param></fmt:message><br>

<br>

<strong>Struts</strong><br>

<s:text name="test.message1"></s:text><br>

<s:text name="test.message2"></s:text><br>

<s:text name="test.message3"><s:param>Joey</s:param></s:text><br>

<s:text name="test.message4"><s:param>Joey</s:param></s:text><br>

 

then this is what I would get on my page:

 

JSTL
How are you doin' friend?
How are you doin'' friend?
How are you doin {0}?
How are you doin' Joey?

Struts
How are you doin friend?
How are you doin' friend?
How are you doin {0}?
How are you doin' Joey?

 

This makes it impossible to reuse the messages from both libraries (e.g.
test.message1 from the example above). 

Is there a way to configure or customize Struts to treat i18n strings
from resource bundles the same way JSTL treats them? Any help would be
appreciated.

 

Thanks

Nenad


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message