基於https://forums.adobe.com/thread/1076594大火DS /使用Adobe的LiveCycle DS解決方案:
服務-config.xml中
<service id="myProxyBootstrapService" class="org.myapp.flex.proxy.MyProxyBootstrapService"/>
MyProxyBootstrapService.java
MyProxyBootstrapService extends AbstractBootstrapService {
@Override
public void initialize(String arg0, ConfigMap arg1) {
PropertyProxyRegistry registry = PropertyProxyRegistry.getRegistry();
registry.register(Serializable.class, new DateProxy());
}
DateProxy.java
public class DateProxy extends BeanProxy {
private static final long serialVersionUID = 8097540028987261941L;
private Integer serverOffset;
public DateProxy() {
super();
}
@Override
public Object getValue(Object instance, String propertyName) {
Object result = super.getValue(instance, propertyName);
if (result instanceof Date) {
result = toDate(result, true);
}
return result;
}
@Override
public void setValue(Object object, String propertyName, Object value) {
if (value instanceof Date) {
Date date = toDate(value, false);
super.setValue(object, propertyName, date);
} else {
super.setValue(object, propertyName, value);
}
}
private Date toDate(Object value, Boolean serverToClient) {
Date date = (Date) value;
Integer clientOffset = getClientOffset();
Integer serverOffset = getServerOffset();
if (clientOffset != null && !clientOffset.equals(serverOffset)) {
Calendar cal = new GregorianCalendar(TimeZone.getDefault());
cal.setTime(date);
cal.add(Calendar.MINUTE, serverToClient ? clientOffset - serverOffset : serverOffset - clientOffset);
date.setTime(cal.getTimeInMillis());
}
return date;
}
private Integer getClientOffset() {
return (Integer) FlexContext.getFlexSession().getAttribute("TIMEZONE_FLEX_OFFSET");
}
private Integer getServerOffset() {
if (serverOffset == null) {
serverOffset = Calendar.getInstance().getTimeZone().getOffset(new Date().getTime())/1000/60 * -1;
}
return serverOffset;
}
非常好的答案,但是你似乎聽起來很難設定正確的日期。很多時候,我讓服務器保存/發送一個通用的日期字符串(包括日期,時間和偏移量)並讓'DateFormatter.parseString'在我的命令類中完成這項工作。 –
是的,根據你正在構建的應用程序的類型,使用字符串而不是Date對象進行服務器通信可能是一個可行的解決方案(我在答案中提到了它,但沒有詳細說明)。 但是,根據我的經驗,如果您有自定義複雜對象(結構化DTO/VO)並且日期字段可以嵌套在這些結構中,並且涉及客戶端日期計算時,事情會變得棘手。 我只是想警告,獨立於選擇的解決方案,對問題的良好理解對於避免不好的意外很重要。 –