1

我有一个 struts2 网络应用程序。

当我将语言更改为阿拉伯语时,所有查询字符串 url 都会给出不确定的结果。我猜这是因为?它被认为是一些变量名,然后它没有正确映射到 Struts2 的目标操作。

尽管互联网上的示例似乎运行良好,但我想这与我的 struts 配置有关。

<constant name="struts.devMode" value="false" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

    <constant name="struts.custom.i18n.resources" value="struts,global"/>
<!--    <constant name="struts.action.extension" value="" />-->

    <constant name="struts.enable.SlashesInActionNames" value="true"/>
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
    <constant name="struts.patternMatcher" value="regex" />

只要语言是英语,类似 url 的http://localhost:8084/myaction?id=4工作就可以很好地工作并返回所需的数据,但是一旦更改了语言,就永远不会调用该 url 绑定操作,而是调用其他一些随机操作。

[更新]

不调用随机动作。实际上,参数没有被映射,因此,由于操作中的验证检查,操作返回 INPUT。但是当语言是英语时,相同的 url 有效,即参数得到完美映射并返回成功。

[更新 2]

<interceptor-stack name="rememberMeStack">
                <interceptor-ref name="rememberme"/>
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="store">
                    <param name="operationMode">AUTOMATIC</param>
                </interceptor-ref>
            </interceptor-stack>

以上是我正在使用的拦截器堆栈。

[更新 3]

http://localhost:8084/search?id=-1&...

只有具有值-1的参数才会给出 OGNL 异常Error Setting Expression,其余数字似乎工作正常。

[更新 4]

我尝试过使用更多语言并发现它不仅适用于阿拉伯语。我想这与他们的左右对齐有关。

我还设法编写了一个小型示例应用程序,它表明只有当语言为阿拉伯语时,表单提交才会出错,并且与其他任何其他语言(英语、中文、法语)一起工作正常。

我还为此提交了关于 struts2 jira 的错误 - https://issues.apache.org/jira/browse/WW-4241

4

1 回答 1

4

其实很简单:阿拉伯语是从右到左的脚本。所以你-1实际上是1-(和一个字符串)你需要输入1-来发布负整数。

于 2013-11-11T11:11:40.627 回答