Using dispatcher FORWARD on FilterDispatcher causes ValueStack to be reseted
----------------------------------------------------------------------------
Key: WW-3742
URL: https://issues.apache.org/jira/browse/WW-3742
Project: Struts 2
Issue Type: Bug
Components: Dispatch Filter
Affects Versions: 2.3.1.1
Environment: Windows 7, Apache Tomcat 5.5.34
Reporter: Oleg
Fix For: Future
I need to allow struts 2 filter to work on Forward requests. The reason why I
need it - we need to implement SEO Friendly urls with
http://www.tuckey.org/urlrewrite/.
And to make it work transparent for user, the above module does forward of all
requests from user friendly url to "struts-friendly url"
I have added the following filter mapping to web.xml to allow struts filter to
be invoked on forward:
{code}
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
....
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
{code}
Also in my struts.xml I have the following constant set
{code}<constant name="struts.locale" value="ru_RU"/>{code}
Just to note that I have all keys ONLY in MyResource_ru.properties defined.
MyResource.properties - has no keys at all
Now a few experiment that I perform:
1) If I call <s:text name="some.key"/> on jsp - text is rendered correctly and
retrieved from "_ru" resource bundle
2) Now if I call from my action or from JSP using OGNL "getText" method on key
that exists in "_ru" resource bundle, but do not exists in default resource
bundle, I got key returned itself (e.g. "some.key")
I've debugged the following method in LocalizedTextUtil class
{code}
public static String findText(Class aClass, String aTextName, Locale
locale, String defaultMessage, Object[] args) {
ValueStack valueStack = ActionContext.getContext().getValueStack();
return findText(aClass, aTextName, locale, defaultMessage, args,
valueStack);
}
{code}
SO, during <s:text> call "valueStack.context" property, contains 22 values.
There is also "locale" defined, so retrieval of key from resource bundle works
correctly.
But during call to "getText" method, "valueStack.context" contains only 7
values. And locale is set to en_US
So looks like context is not initialized
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira