2016-02-25 3 views
2

Добрый день.Pass ArrayList для JQuery Flot

Английский - не мой родной язык, поэтому, пожалуйста, будьте терпеливы.

Я новичок в [см. Теги] и имею веб-приложение, которое собирает дату и серию, чтобы сделать запрос sql и вернуть некоторые данные (значение от меры и дату от меры) к действию doDrawFlot, в действии эти данные формируются для заполнения графа флота.

Мне нужен ArrayList < (String или Integer)> и передать его Javascript для заполнения графа флота.

В этот момент у меня Действие:

public InputStream inputStream; 

    public String doDrawFlot() { 

     StringBuilder response = new StringBuilder(); 

     response.append("1_20"); 
     response.append("2_50"); 
     response.append("3_10"); 

     byte[] bArray = response.toString().getBytes(); 
     inputStream = new ByteArrayInputStream(bArray); 

     return SUCCESS; 
    } 

Struts2 XML

<action name="GetProfile" class="com.raspberry.struts.action.PerfilCargaAction" 
     method="doDrawFlot"> 
    <interceptor-ref name="SessionValidationStack" /> 
    <result type="stream"> 
     <param name="contentType">text/html</param> 
     <param name="inputName">inputStream</param> 
    </result>    
</action> 

И в Javascript Файл:

$(document).ready(function() { 
    //Re-load records when user click 'load records' button. 
    $('#LoadRecordsButton').click(function (e) { 
     $.ajax({ 
     type: 'POST', 
     url: 'GetProfile?fechaPerfil='+$('#startDate').datepicker({ dateFormat: 'yyyy-mm' }).val()+'&meter=' + $('#meterList option:selected').text(), 

     success: function (response) { 
console.log(response); //At request of @Raidri 
      var servletResponse = response; 

      var str = []; 
      var num = []; 
      var d1 = []; 

      for (var i = 0, len = servletResponse.length; i < len; i++) { 

       num.push(parseInt(servletResponse[i].split("_")[0])), 
       str.push(parseInt(servletResponse[i].split("_")[1])); 
       d1[i] = [num[i],str[i]];  
      } 
console.log(d1); //At request of @Raidri 
      $.plot($("#placeholder"), [d1]); 
     } 
     });  
     }); 
    $.plot($("#flotDiv"), [[]]);     
}); 

Как вы можете видеть, что данные не в ArrayList, это связано с тем, что я использую входной поток для передачи стороне клиента данных.

Для передачи данных, подобных массиву, и правильное форматирование на флоте абсолютно необходимо использовать Json (или Gson)?

Или моя текущая сборка может выполнить эту работу?

Любые идеи (исправления кода, POJO, простые учебники для нуба) или рекомендации?

Я использую struts2, а mykong tutorial мне не помогли.

Обновление:

По желанию @Raidri выход из бревен две консоли:

console.log (ответ): 1_202_503_10

console.log (d1): [1,NaN][NaN,NaN][2,NaN][0,NaN][2, NaN][NaN,NaN][5,NaN][0,NaN][3,NaN][NaN,NaN][1,NaN][NaN,0]

Поток отправляет одну строку, мне нужен массив, потому что длина мер может измениться (т.е. «102» или «0»)

+0

Пожалуйста, вставьте 'console.log (ответ) 'в начале функции обратного вызова успеха и' console.log (d1) 'перед вызовом' $ .plot() ', а затем добавьте результаты в свой ответ. – Raidri

+0

@Raidri Спасибо за ваш комментарий, вопрос обновлен. –

ответ

1

Как вы можете видеть, ваш массив d1 недействителен. И исходная строка данных необходим разделитель между точками данных, например

response.append("1_20;"); 
... 

// response = "1_20;2_50;3_10" 

Тогда мы можем использовать функцию map() строить наш массив данных, как это:

d1 = response.split(';').map(function (datapoint) { 
    return datapoint.split('_'); 
}); 

// d1 = [["1", "20"], ["2", "50"], ["3", "10"]] 
+0

Ваш ответ был наиболее полезен, но не обрабатывает массивы. Тем не менее, я смог правильно построить свои данные с небольшой «работой вокруг» вашего ответа. Если никто не ответит методом массивов, я приму ваш ответ. Еще раз спасибо. –

+0

Спасибо Raidri. Ваш ответ помогает мне управлять двумя «Яксисами» и отображать данные по времени. –