Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jboss seam: передать Set<Date> в javascript


Автор: leniviy 1.10.2011, 10:08
Есть манагед бин:
Код

class MyBean {
  public Set<Date> getDates() {
    Set<Date> rslt = new HashSet<Date>();
    rslt.add(new Date(111,1,1));
    rslt.add(new Date(111,2,1));
    return rslt;
 }
}

Есть страничка
Код

...
    <ui:define name="pageContent">
    <script type="text/javascript">
      var dates = #{myBean.dates};
    </script>
...

мне надо, чтобы было так:
var dates = [new Date(2011,1,1), new Date(2011,2,1)];

#{myBean.dates} резолвится как "[2011-02-01,2011-03-01]".

Я пробовал через <a4j:support data="#{myBean.dates}" oncomplete="dates = data;">
Он якобы делает сериализацию через JSON.
Тогда получается массив объектов, похожих на Date, но не Date: { year: 111, month: 1, date: 1,  timeZone... }.
И кроме того я не хочу делать дополнительный ajax реквест.

У меня одна мысль: добавить ещё проперти в мой бин, который будет возвращать "[new Date(2011,1,1), new Date(2011,2,1)]".

Автор: MisterCleric 1.10.2011, 20:28
Цитата

"[2011-02-01,2011-03-01]"


Дык, а в чем проблема? Это ж и есть JavaScript массив дат

Автор: leniviy 2.10.2011, 10:23
2011-02-01 - это интовое выражение с двумя минусами, а не дата.

Автор: MisterCleric 2.10.2011, 11:58
Цитата

2011-02-01 - это интовое выражение с двумя минусами, а не дата

Сранно, очень странно...
У меня есть такое:
Код

 <script type="text/javascript">
            var maxFutureDate = '#{maxFutureDate}';
            var serverTimeZoneOffset = '#{timeZone.rawOffset}' / 1000 / 60 / 60;
            var serverTimeZone = 'GMT' + (serverTimeZoneOffset >= 0 ? "+" + serverTimeZoneOffset : serverTimeZoneOffset) + '00';
        </script>


И все отлично из Seam приезжает в JavaScript

Автор: leniviy 2.10.2011, 13:17
У вас maxFutureDate - строка, а не дата. 

Автор: leniviy 2.10.2011, 14:16
Честно говоря, я понял, что для моей задачи лучше подходит не массив дат, а объект:

чтобы можно было проверять наличие даты в наборе.
Код

        var reportDates = #{ddaBean.JSReportDates}; // { '2011-7-1':1, '2011-7-2':1 };
        function disablementFunction(day){
            var d = day.date;
            var s = (1900+d.getYear())+'-'+(1+d.getMonth())+'-'+d.getDate();
            return (reportDates[s] == 1);
        }

странный глюк форума: пишу code=java, а он делает javascript 
Код

    @SuppressWarnings("deprecation")
    public String getJSReportDates() {
        SortedSet<Date> reportDates = getReportDates();
        if (reportDates == null)
            return "null";
        StringBuilder sb = new StringBuilder(reportDates.size()*22);

        sb.append('{');
        boolean b = false;
        for (Date d : reportDates) {
            if (b)
                sb.append(',');
            else
                b = true;
            sb.append("'").append(1900+d.getYear()).append('-').
                append(1+d.getMonth()).append('-').
                append(d.getDate()).append("':1");
        }
        sb.append('}');
        return sb.toString();
    }

Автор: MisterCleric 2.10.2011, 14:43
Цитата

У вас maxFutureDate - строка, а не дата.  


Как у нас на Украине говорят:

Цитата

Не кажи гоп, поки не перепригнеш


Еще раз такой код у меня на странице.
Потом у меня есть GWT-module, в котором написано такое:
Код

public static native Date getMaxFutureDate()
        /*-{
            return $wnd.maxFutureDate;
        }-*/;


Так что давайте не спорить, у кого еще строки получаются...

Добавлено через 2 минуты и 34 секунды
Да, и если не заметил, то следующая у меня строка:
Код

var serverTimeZoneOffset = '#{timeZone.rawOffset}' / 1000 / 60 / 60;

Вычисляемое значение. А вот если бы действительно  '#{timeZone.rawOffset}' было бы строкой, смог бы я посчитать какое там смещение у TimeZone?

Автор: leniviy 2.10.2011, 14:47
Что за native? GWT что-ли?

Добавлено @ 14:52
Цитата(MisterCleric @ 2.10.2011,  14:43)
А вот если бы действительно  '#{timeZone.rawOffset}' было бы строкой, смог бы я посчитать какое там смещение у TimeZone?

Да, смог бы.
Код

var serverTimeZoneOffset = '3000' / 1000;
document.write(serverTimeZoneOffset);

выводит 3

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)