问题标签 [struts2-interceptors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Struts 2 请求中未提交的单字母驼峰式字段
我有这个非常奇怪的映射问题。所有字段名称(如金额、newCase、状态等)都完美地到达了 struts 操作,但没有一个单字母 camelCase 字段到达操作。全部为空。
例如
上面的代码给出了输出:
对于以下请求 URL:
http://localhost:8084/callback?fAmount=23.323&fFee=23&amount=2323&nCase=2323.23&sStatus=nitin
我有适当的 getter 和 setter(现在检查了很多次)
我也检查了拦截器,并且我正在使用 defaultStack 进行此方法/操作
java - Struts2 中 i18n 拦截器的使用
我想制作一个多语言网站。
我有一个普通的拦截器堆栈,其中包含
用于更改语言环境的常用 jsp:
还有一个简单的 LocaleManager 动作
在上述场景中,i18n 拦截器始终针对所有操作运行,但没有得到解决方案。因为仅当用户单击 locale-manager 操作时,区域设置才会更改。
我尝试删除拦截器堆栈并将 i18n 拦截器仅添加到 LocaleManager 如下
但它没有奏效?!我错过了什么,还是应该编写自己的拦截器?
java - struts2 使用什么算法生成随机令牌?
Struts 拥有TokenInterceptor
并TokenSessionStoreInterceptor
使用在 jsp 上通过<s:token></s:token>
tag 生成的令牌,如下所示。
随机生成令牌algorithm
是什么。uses
struts2 - 语言为阿拉伯语时无法识别负整数请求参数,其他语言(如英语、德语、法语和中文)工作正常
我有一个 struts2 网络应用程序。
当我将语言更改为阿拉伯语时,所有查询字符串 url 都会给出不确定的结果。我猜这是因为?
它被认为是一些变量名,然后它没有正确映射到 Struts2 的目标操作。
尽管互联网上的示例似乎运行良好,但我想这与我的 struts 配置有关。
只要语言是英语,类似 url 的http://localhost:8084/myaction?id=4
工作就可以很好地工作并返回所需的数据,但是一旦更改了语言,就永远不会调用该 url 绑定操作,而是调用其他一些随机操作。
[更新]
不调用随机动作。实际上,参数没有被映射,因此,由于操作中的验证检查,操作返回 INPUT。但是当语言是英语时,相同的 url 有效,即参数得到完美映射并返回成功。
[更新 2]
以上是我正在使用的拦截器堆栈。
[更新 3]
只有具有值-1
的参数才会给出 OGNL 异常Error Setting Expression
,其余数字似乎工作正常。
[更新 4]
我尝试过使用更多语言并发现它不仅适用于阿拉伯语。我想这与他们的左右对齐有关。
我还设法编写了一个小型示例应用程序,它表明只有当语言为阿拉伯语时,表单提交才会出错,并且与其他任何其他语言(英语、中文、法语)一起工作正常。
我还为此提交了关于 struts2 jira 的错误 - https://issues.apache.org/jira/browse/WW-4241
date - 在 strust2 datetimepicker 中显示日期
(2013-11-15(yyyy-MM-dd))
当我在 struts2 datetimepicker之前和之后禁用所有天时(2013-12-02(yyyy-MM-dd))
,我得到一个月内所有启用天的输出,这意味着 12 月的 01,02 日期也是 11 月。代码是,
输出在日历中,
在上面 15 之前,之后 2 是禁用日期,我只在 11 月获得所有日期,我想显示 11 月必须以 30 和下个月剩余的启用天数结尾。下个月如何显示?
java - Struts2 中的日期转换
我想知道如何在 Struts2 中将 a 转换String
为Date
。我有一个简单的表格,用户可以在其中提供这种格式的日期"yyyy-MM-dd"
。将 Sturts2 映射表提交给 bean。我在日期转换中遇到错误。我用谷歌搜索了很多,每一个地方都说我们必须为此使用自定义类型转换器。我不想为日期转换编写自定义类型转换器。我认为Struts2中应该有一个简单的数据转换机制,因为数据转换是非常常见的功能。
JSP
这是用户输入输入的 JSP。
模型类
动作类
java - Struts 2 - 了解 OGNL 和 params 拦截器之间的工作
我是 Struts 2 的新手。我正在从 Struts2 In Action 一书中学习它。我很难理解 OGNL 中的一些概念,如下所示 -
我们知道
params
拦截器将数据从请求参数移动到ValueStack
. 现在在阅读时,我遇到了这样一句话:“工作的棘手部分是将参数的名称映射到ValueStack
.params
表达式以在 ValueStack 上定位正确的目标属性”。问题1)在这里,“解释”是什么意思?是 params 拦截器将请求参数转换为一些 OGNL 表达式,然后 OGNL 表达式提供到 ValueStack 中属性的映射,还是意味着其他什么?
当结果开始其呈现过程时,Struts 2 标记通过使用 OGNL 表达式引用特定值从 ValueStack 中检索数据。
问题2)所以标签采用OGNL表达式,但是数据是如何移动的?早些时候,
params
拦截器是移动数据的那个,但现在没有params
拦截器。那么数据是如何被移动的呢?
struts2 - 基于特定 URl 模式的 Struts2 拦截器
我想对所有以特定名称开头的操作使用 struts2 拦截器:
假设我想拦截所有以Module开头的动作。有什么方法可以像 Spring AOP那样配置拦截器,例如:com.acme.web.actions.Module*
我不能使用 AOP,因为它会破坏所有页面参数(因为我猜那里无法调用 params 拦截器)。
这可能吗?
java - 在动作类中执行 CRUD 操作以及 Struts2 中的 prepare() 方法
假设以下动作类。
我排除了注释和其他东西以避免代码噪音。映射到这些方法的操作使用paramsPrepareParamsStack
拦截器。
在这里,当一个与方法关联的动作insert()
被触发时(它由 完成<s:submit>
),结果将是重定向动作。因此,将创建动作类的新实例,该实例导致load()
方法被执行,这反过来又导致该prepare()
方法再次被执行。更新和删除时也会发生同样的事情。
该prepare()
方法首先在与<s:submit>
(or <s:link>
) 关联的动作被触发时立即执行,然后在请求被重定向时再次执行(这可以理解,因为请求的重定向导致创建动作类的新实例,从而导致关联的动作与load()
要执行的方法并prepare()
在每个动作上执行一次)。
该prepare()
方法中唯一的一行具有昂贵的操作。为了防止该getList()
方法被执行两次,我做了一些条件检查,如下所示。
这种方法可能有更多的条件检查和复杂的代码。
这样做仍然不够。如果由于条件而发生任何验证/转换错误,则不会初始化列表。没有hasErrors()
,hasActionErrors()
并且hasFieldErrors()
将prepare()
在任何错误后在方法中评估为真。这需要在validate()
方法中加载列表,如下所示。
这现在满足了要求,但看起来非常难看,有这样的条件检查,不能被认为是一个好方法。
有没有更好的方法来保证在请求执行插入、更新、删除等操作后从数据库中检索列表只发生一次?
它应该与每个请求在后台执行多少操作无关。尽管存在一些转换/验证错误,但应仅在请求完成之前检索该列表一次事件。
@Before
, @BeforeResult
,@After
注释似乎都不能解决这种情况。
在旨在检索/初始化列表的方法中使用此类代码validate()
似乎不是一个好习惯。
我希望在CRUD 操作之后有一种方法可以获取此列表。由于从数据库中获取此列表的成本很高,因此该列表应仅在每个操作(插入、编辑、更新、删除)完成后初始化一次。
java - 在'class xxx上设置'xxx'时出现意外异常:错误设置表达式'xxx'的值['x',]
我将一些参数传递给ModelDriven<Transporter>
通过查询字符串实现的操作类。
动作类如下。
服务器终端显示以下消息。
即使日志级别是SEVERE
,这些参数的值在操作类中也可用
在edit()
方法中。
如果paramsPrepareParamsStack
到那时被替换defaultStack
,这些消息就会消失。
像这样的表达式['DHL', ]
表示一个数组。transporterId
和transporterName
在模型中,然而,分别是类型Long
和String
。
我究竟做错了什么?