关于Struts2用户自定义locale的问题

想必很多读《Struts2权威指南》的朋友都会对第9章最后一个用户自定义locale的小例子有些迷惑。至少对于初学struts2的我来说是这样。

问题的关键就是于,那个传说中在valuestack中的locale是从哪里冒出来的。

配置好tomcat,运行http://localhost:8080/customerI18N/selectlanguage.jsp,发现抛出异常,异常的原因是s:select标签中的list属性无法取到值,list是取在s:bean中定义的locales的getLocales,归结原因,只可能是locales初始化失败!那初始化失败的原因呢?

看这段代码:

<s:bean id="locales" name="lee.Locales">
  <s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
  </s:bean>



此时在valuestack中怎么可能会有这个值?

于是只好按照书中的运行方法,运行

http://localhost:8080/customerI18N/selectlanguage.action

发现测试成功了!连忙加上s:debug,发现

 

关于Struts2用户自定义locale的问题
locale居然出现在了valuestack中。我只是把用户请求通过了struts2框架,valuestack中就有了locale。

呵呵,这不难理解,因为在struts.xml中有

<action name="*">
   <result>/WEB-INF/jsp/{1}.jsp</result>
  </action>



默认的class就是ActionSupport,这下终于快水落石出了:通过将请求传给struts2框架,filterdispater将请求传给ActionSupport,于是在valuestack中就有了ActionSupport以及它的属性。还有一个小问题,它是怎么初始化成zh_cn的呢?

还是刚才的debug,发现在stack context中有

[img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 620px; HEIGHT: 178px; TEXT-ALIGN: center" height=111 alt="" src="http://122.img.pp.sohu.com/images/blog/2008/3/15/16/19/1194fcebe1f.jpg" mce_src="http://122.img.pp.sohu.com/images/blog/2008/3/15/16/19/1194fcebe1f.jpg" width=530 border=0]

[/img]



原来是struts2框架在初始化的时候,就会根据浏览器自动生成关于locale的静态值,在ActionSupport初始化的时候,将这个值传给了它。

 

你可能感兴趣的:(tomcat,bean,jsp,框架,struts)