【问题标题】:Issue: Action redirect do not include parameter as complex objects in Struts2?问题:动作重定向不包括参数作为 Struts2 中的复杂对象?
【发布时间】:2011-05-24 16:07:36
【问题描述】:

我尝试了一个使用 UserAction 类的 insert 方法插入用户的示例。

在插入时,我已将成功重定向到 UserAction 的 loadAdd 方法。

在重定向期间,我将参数传递为

${用户}

在 struts 2.0.14 中,这给出了一个 ognl 异常。

而当我通过时

${user.id}

它有效。

我的观察表明这是 struts 或 ognl 中的一个错误,它在解析简单数据类型时会解析复合对象。

请提出任何解决方法。

或者

有什么方法可以在重定向的动作中转发完整的动作上下文或值堆栈

【问题讨论】:

    标签: redirect struts2 action


    【解决方案1】:

    这不是错误。

    Struts2 使用类型转换系统在字符串(本机 HTTP)和其他对象之间进行转换。它具有所有标准原语、盒装原语、集合、映射等的默认类型转换器。如果您想允许 Struts2 在字符串和您的 User 类之间自动转换,您需要为它创建一个类型转换器。否则,您可以使用 ${user.id},它是一个基元或盒装基元。

    http://struts.apache.org/2.2.3/docs/type-conversion.html

    此外,ValueStack 是针对每个请求的,因此当您重定向并创建新请求时,之前的请求 ValueStack 不再可用。

    【讨论】:

    • 我知道这不是一个错误,但不是停止执行,而是默认的 user.id 可能已被 struts 使用。如果不处理并且程序停止,用户得到的是一个很长的异常堆栈跟踪。所以对于struts2社区的关注。感谢您向我推荐用户定义的类型转换,但不确定我是否真的能够转储完整的用户对象,包括它的几个链接对象和直接使用它的集合。用户对象有近 12 种基本类型,10 种复杂对象,它们又有更多对象和 4 个集合。
    • 类型转换不是代替user.name、user.email等,只是设置用户是什么。您似乎希望 user.id 和 user 是同义词。或许你可以澄清一下你真正想要做什么?
    • 我正在寻找在重定向操作时传递完整的用户对象及其嵌套对象和集合。由于未发布此数据,但使用了 Get,因此我必须传递 id。所以我期待的是在动作重定向期间发布一些数据或将完整的值堆栈转发到重定向的动作。有什么解决方法吗?
    猜你喜欢
    • 2017-01-12
    • 2010-11-21
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多