我正在尝试使用BlazeDS将数据从flex Side发送到Java
FLEX中的字段类型
private var _scheduleDate:Date;
我已经用new Date()
对其进行了初始化,如果发出警报,系统上会显示正确的日期和时间。现在,当对象被发送到Java时。日期变了。
请注意,我的flex应用程序和Java(JBoss服务器在同一台机器上运行)。如果我独立地在Java端打印用new Date()
初始化的日期,它也会显示系统的正确日期。
现在转换部分:在FLEX上
2013年4月25日12:30 PM(显示警报)
当我打印这个经过的日期(在Java端)时,它的
2013年4月25日下午02:30(时差2小时)
我读了很多关于解决方案的博客等,他们提到这是一个时区问题,但我不明白,如果客户端和服务器都在一个系统上,时区问题怎么会导致这个问题。
具有新的Date()
的Alert(flex)
和println(java)
会显示截至系统的正确日期,因此时区问题是如何产生的。我唯一能想到的是,BlazeDS导致了这个问题。
在此链接中,他们引用了blazeDS的一些定制编组,但它超出了我的理解Custom Marshalling from Java to Flex via BlazeDS
现在我对这个问题只有一个解决方案,那就是将String
中的日期作为纯文本而不是Date
对象发送,并在Java端将String
转换回Date
对象。
有没有更好的解决办法,或者如果我的理解有任何问题,请谁指出这一点。
谢谢,
2条答案
按热度按时间c90pui9n1#
我建议采取以下解决方案。
首先,发送客户端时区偏移量并将其存储为会话属性。
弹性
Java
创建我们自己的端点类,扩展
flex.messaging.endpoints.AMFEndpoint
并将其指向通道定义:服务-config.xml
AMFEndpoint t.Java
扩展AMF串行器、反串行器、AMF输入/输出:
Serializer.Java
desializer.java
AMF0Input.Java
AMF0Output.Java
最后,扩展AMF3输入/输出类,其中Date被序列化和反序列化。您可以应用偏移差额。
AMF3Input.Java
AMF3Output.Java
现在,在Flex前端和BlazeDS后端之间传递的所有日期都将自动转换。请注意,您实际上更改了日期。
假设服务器时区为GMT+6,客户端为GMT+2时区。您正在从数据库中检索日期。Java上的日期是
01.01.2013 10.00.00 GMT+6
,通常flex会得到01.01.2013 06.00.00 GMT+2
。日期相同,但字符串的等效值不同。在我们的例子中,flex将得到01.01.2013 10.00.00 GMT+2
。我们改了日期。但字符串等效项是相同的。bxfogqkk2#
此外,为了与以前版本的Java兼容,创建另一个类:
并且我更改了类AMFEndpoint.Java