这是我的情况:在webapp中,我使用拦截器来设置语言(Locale
)。
如果用户已登录,我使用了该用户的language属性。
否则,如果设置了cookie,我将使用此cookie的值。
另外,我使用浏览器的设置。
当我导航到应用程序和登录时,它运行良好。
问题出在欢迎页面,因为它调用了mydomain.com/index.jsp,它没有通过拦截器所以没有设置语言(它总是使用浏览器设置)。
有没有办法在索引页面上浏览拦截器或在index.jsp页面中设置Locale
值?
谢谢!
解决方案:
我从web.xml文件中的.jsp
中删除了index.jsp
:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
我将index
操作添加到我的struts.xml文件中:
<default-action-ref name="index" />
<action name="index">
<interceptor-ref name="appStack" />
<result name="success">index.jsp</result>
</action>
语言拦截器是appStack
。
谢谢你们的帮助!
答案 0 :(得分:2)
我建议你做两件事之一:(你的选择)
(1)在Web过滤器中实现您的逻辑,并使用此过滤器配置容器,以便设置语言(如果尚未设置)。这很容易做到,只需查看HelloWorld过滤器的任何示例。
...或
(2)确保您的主页只能作为Struts2操作访问(您可以在Struts2配置文件中定义默认操作)并确保您的拦截器是默认堆栈的一部分。
希望有所帮助!
答案 1 :(得分:1)
我只想添加约束插件(struts2-conventions-plugin-x.x.x.jar),其中x.x.x是您正在使用的版本。
然后我会将所有公共jsp移动到/ WEB-INF / content下并完成。
在你的web.xml中我没有提到任何欢迎文件......但是如果你想明确的话:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
如果使用Struts 2.2.1,你的web.xml应该看起来像......
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>action</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>action</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果你想用struts.xml方式做,那么只需移动/ WEB-INF下的index.jsp并为它创建一个动作映射......类似于:
<action name="index">
<result>/WEB-INF/index.jsp</result>
</action>
将在包含名称空间“/”或“”。
的包中另一方面,我有一段时间没有看过本地的东西,但你确定你没有重新发明轮子...... i18n拦截器已经在默认堆栈中了。
了解它的用途。简而言之,为每种语言定义了语言属性文件。如果Struts2确定正在使用这些属性,那么struts标签将在其name属性中搜索属性文件中匹配字符串的值,并返回该映射条目的值。
一切都很漂亮。对不起,如果这是你已经在做的事情,但是如果你不知道它会给你节省很多时间。