Cookies 如何在默认页面上使用拦截器?

Cookies 如何在默认页面上使用拦截器?,cookies,struts2,interceptor,Cookies,Struts2,Interceptor,我的情况如下:在webapp中,我使用拦截器设置语言(Locale)。 如果用户已登录,则我使用了该用户的language属性。 否则,如果设置了cookie,我将使用此cookie的值。 否则,我将使用浏览器的设置 当我导航到应用程序并登录时,它运行良好 问题出在欢迎页面上,因为它调用mydomain.com/index.jsp,所以它没有经过拦截器,所以没有设置语言(它总是使用浏览器设置) 有没有办法通过索引页面上的拦截器,或者在index.jsp页面中设置Locale值 谢谢大家! 解决方

我的情况如下:在webapp中,我使用拦截器设置语言(
Locale
)。 如果用户已登录,则我使用了该用户的language属性。 否则,如果设置了cookie,我将使用此cookie的值。 否则,我将使用浏览器的设置

当我导航到应用程序并登录时,它运行良好

问题出在欢迎页面上,因为它调用mydomain.com/index.jsp,所以它没有经过拦截器,所以没有设置语言(它总是使用浏览器设置)

有没有办法通过索引页面上的拦截器,或者在index.jsp页面中设置
Locale

谢谢大家!

解决方案:

我从web.xml文件中的
index.jsp
中删除了
.jsp

<welcome-file-list>
  <welcome-file>index</welcome-file>
</welcome-file-list>
<default-action-ref name="index" />

<action name="index">
  <interceptor-ref name="appStack" />
  <result name="success">index.jsp</result>
</action>
语言拦截器是
appStack
的一部分


谢谢你们的帮助

我只想添加约定插件(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>

行动
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
行动
/*

如果您想以struts.xml的方式执行,那么只需将index.jsp移到/WEB-INF下,并为其创建一个操作映射。。。比如:

    <action name="index">
        <result>/WEB-INF/index.jsp</result>
    </action>

/WEB-INF/index.jsp
将位于命名空间为“/”或“”的包中

另一方面,我已经有一段时间没有看当地的东西了,但你确定你没有重新发明轮子。。。i18n拦截器已在默认堆栈中

看看它的用途。长话短说,有为每种语言定义的语言属性文件。如果Struts2已确定正在使用这些属性,则struts标记将在属性文件中搜索其名称属性中的值以查找匹配的字符串,并返回该映射项的值


一切都很顺利。如果这是您已经在做的事情,那么很抱歉,但有可能您不知道这会为您节省很多时间。

我建议您做两件事中的一件:(您的选择)

(1) 在web筛选器中实现逻辑,并使用此筛选器配置容器,以便可以设置语言(如果尚未设置)。这很容易做到,只需看看HelloWorld过滤器的任何示例

或者

(2) 确保主页只能作为Struts2操作访问(您可以在Struts2配置文件中定义默认操作),并确保拦截器是默认堆栈的一部分

希望有帮助