У меня была аналогичная проблема в Firefox и Safari при работе с AngularJS. Например, если дата, возвращаемая из Angular, выглядит так:
2014-06-02 10:28:00
с помощью этого кода:
new Date('2014-06-02 10:28:00').toISOString();
возвращает недопустимую ошибку даты в Firefox и Safari. Однако в Chrome он отлично работает. Как сказал еще один ответ, Chrome, скорее всего, будет более гибким с синтаксическими строками даты.
Моя конечная цель состояла в том, чтобы отформатировать дату определенным образом. Я нашел отличную библиотеку, которая обрабатывала проблему совместимости с кросс-браузером и проблему форматирования даты. Библиотека называется moment.js .
Используя эту библиотеку, следующий код работает правильно во всех проверенных вами браузерах:
moment('2014-06-02 10:28:00').format('MMM d YY')
Если вы хотите чтобы включить эту дополнительную библиотеку в ваше приложение, вы можете легко построить свою строку даты, избегая при этом проблем с совместимостью с браузером. В качестве бонуса у вас будет хороший способ легко форматировать, добавлять, вычитать и т. Д., Если это необходимо.
Вы можете добиться этого, выполнив HttpSessionBindingListener, вам нужно зарегистрировать сеанс, который содержит блокировку, вызвав registerSession
(строка «sessionBindingListener» не может быть изменена). Контейнер обратится к методу valueUnbound()
после окончания сеанса и до того, как сеанс будет уничтожен.
public class ObjectLock implements Serializable,HttpSessionBindingListener {
public void valueBound(HttpSessionBindingEvent event) {
log.info("valueBound:" + event.getName() + " session:" + event.getSession().getId() );
}
public void registerSession() {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put( "sessionBindingListener", this );
log.info( "registered sessionBindingListener" );
}
public void valueUnbound(HttpSessionBindingEvent event) {
log.info("valueUnBound:" + event.getName() + " session:" + event.getSession().getId() );
// add you unlock code here:
clearLocksForSession( event.getSession().getId() );
}
}
Еще одно элегантное решение:
Просто добавьте аннотацию @PreDestroy
в Session-Bean! Если сеанс будет уничтожен, он предварительно вызовет PreDestroy на всех SessionBeans, там вы можете выйти и все!
Хотя это в настоящее время не работает со многими ApplicationServers, кажется, это нечеткий сегмент Спецификация JSF. Итак, переход с принятым ответом (HttpSessionBindingListener) будет необходим, пока @PreDestroy не будет работать на всех серверах.