问题:动作重定向不包括 Struts2 中复杂对象的参数?
我尝试过一个示例,其中我使用 UserAction 类的 insert 方法插入了用户。
在插入时,我已将成功重定向到 UserAction 的 loadAdd 方法。
在重定向期间,我将参数作为
${user}
传递,在 struts 2.0.14 中,这给出了 ognl 异常。
而当我传递
${user.id}
时它就起作用了。
我的观察表明,这是 struts 或 ognl 中的一个错误,它在解析简单数据类型时解析复合对象。
任何解决方法请建议。
或者
有什么方法可以在重定向操作中转发完整的操作上下文或值堆栈
I have tried an example in which i have inserted a user using insert method of UserAction class.
On insert I have redirected the success to loadAdd method of UserAction.
During redirect I have passed the parameter as
${user}
In struts 2.0.14 this gives an ognl exception.
whereas when I pass
${user.id}
it works.
My observation says this is a bug in struts or ognl that it does parse composite objects while it parses simple data types.
Any work-around please suggest.
Or
Is there any way by which I can forward the complete action context or value stack in the redirected action
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这不是一个错误。
Struts2 使用类型转换系统在字符串(本机 HTTP)和其他对象之间进行转换。它具有适用于所有标准基元、装箱基元、集合、映射等的默认类型转换器。如果您希望允许 Struts2 在字符串和 User 类之间自动转换,您需要为其创建一个类型转换器。否则,您可以使用 ${user.id},它是基元或装箱基元。
http://struts.apache.org/2.2.3/docs/type -conversion.html
此外,ValueStack 是针对每个请求的,因此当您重定向并创建新请求时,之前的请求 ValueStack 不再可用。
It's not a bug.
Struts2 uses a type conversion system to convert between Strings (native HTTP) and other objects. It has default type converters for all of the standard primitives, boxed primitives, collections, maps, etc. If you want to allow Struts2 to automatically convert between a string and your User class, you need to create a type converter for it. Otherwise, you can use ${user.id}, which is a primitive or boxed primitive.
http://struts.apache.org/2.2.3/docs/type-conversion.html
Also, the ValueStack is per-request, so when you redirect and create a new request, the previous requests ValueStack is no longer available.