2016-07-06 2 views
0

私のコードに日付フィルタを追加しようとしています。 AngularJS Date-Pickerで選択した日付をJavaサーブレットに渡して、次に示すようにPersistenceコードでストアドプロシージャを呼び出したいとします。AngularJS DatepickerからJava Servletに日付を渡すには?

JavaScriptで日付を正しくフォーマットしてから、Javaコードで日付を正しくフォーマットするにはどうすればよいですか?

日付ピッカーコード

<datepicker date-format="yyyyMMdd" button-prev='<i class="fa fa-arrow-circle-left"></i>' 
    button-next='<i class="fa fa-arrow-circle-right"></i>'> 

    <input ng-model="filters.dateFrom" type="text" placeholder="Select a starting date"> 

</datepicker> 


<datepicker date-format="yyyyMMdd" button-prev='<i class="fa fa-arrow-circle-left"></i>' 
    button-next='<i class="fa fa-arrow-circle-right"></i>'> 

    <input ng-model="filters.dateTo" type="text" placeholder="Select an end date"> 

</datepicker> 

AngularJSコード

app.factory('graphService', function ($http, Restangular) { 

     var exports = {}; 

     exports.getRestangular = function() { 
      // return Restangular.setBaseUrl("/api"); 
      return Restangular.setBaseUrl("/apm/graph"); 
     }; 

     exports.getGraphDataDC = function (dcName, from, to) { 
      return exports.getRestangular().one("graphData/DC/" + dcName + "/" + from + "/" + to).get(); 
     }; 

Javaサーブレット

    List <SummaryDelaysDataCenter80Perc> dcData; 

        String dcname = pathInfo[pathInfo.length-3]; 
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); 

        try { 
         from = new java.util.Date(simpleDateFormat.parse(pathInfo[pathInfo.length - 2]).getTime()); 
        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 

        try { 
         to = new java.util.Date(simpleDateFormat.parse(pathInfo[pathInfo.length - 1]).getTime()); 
        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 

        try 
        { 
         dcData = persistance.getSummaryDelaysDC80Perc(from, to, dcname); 
        } catch(RuntimeException e) { 
         LOGGER.error("Could not load data form database, reason: {}", e); 
         throw new ServletException(e); 
        } 
        // parse to json 
        json = ThreadsafeUtils.getGsonInstance(pretty).toJson(dcData); 
        LOGGER.debug(dcData.size() + " summary entries were read"); 

        out.write(json); 
        break; 

永続

public List<SummaryDelaysSystem80Perc> getSummaryDelaysSystem80Perc(Date from, Date to, String systemName) throws RuntimeException { 
     List<SummaryDelaysSystem80Perc> result = new ArrayList<>(); 
     Calendar c = Calendar.getInstance(Locale.GERMANY); 
     java.sql.Date minDate; 
     java.sql.Date maxDate; 
     String call; 
     if (from != null) 
      minDate = new java.sql.Date(from.getTime()); 
     else 
      minDate = Utils.getDBMinDate(); 

     if (to != null) { 
      maxDate = new java.sql.Date(to.getTime()); 
     } else { 
      maxDate = Utils.getDBMaxDate(); 
     } 
     call = "CALL " + summaryDelaysSystemProcedureName + "(?, ?, ?, ?)"; 

//  sdelten80.setName(systemName); 
     try { 
      //prepare statement 
      java.sql.Connection connection = em.unwrap(java.sql.Connection.class); 
      java.sql.CallableStatement cst = connection.prepareCall(call); 
      //set parameters 
      cst.setDate(1, minDate, c); 
      cst.setDate(2, maxDate, c); 
//   cst.setString(2, to.toString()); 
      cst.setString(3, systemName); 
      // execute statement and retrieve result 
      cst.execute(); 
      ResultSet rs = cst.getResultSet(); 
      while (rs.next()) { 
       SummaryDelaysSystem80Perc sdelsys80 = new SummaryDelaysSystem80Perc(); 
       DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.GERMANY); 
       String strDate = dateFormat.format(rs.getTimestamp(1)); 
       sdelsys80.setName(rs.getString(2)); 
       sdelsys80.setDate(strDate); 
       sdelsys80.setPerc80serverdelay(Double.toString(rs.getDouble(3))); 
       sdelsys80.setPerc80networkdelay(Double.toString(rs.getDouble(4))); 
       sdelsys80.setPerc80clientdelay(Double.toString(rs.getDouble(5))); 
       sdelsys80.setPerc80roundtrips(Long.toString(rs.getLong(6))); 
       result.add(sdelsys80); 
      } 
     } catch (java.sql.SQLException e) { 
      throw new RuntimeException("StoredProcedureCall was not successful", e); 
     } 
     return result; 
    } 

答えて

0

はあなたの日付ピッカーは、ポストデータという形式である必要があります。入力フィールド名を使用すると、転記された値にアクセスできます。

は、同様にここを参照してください:How to transfer data from JSP to servlet when submitting HTML form

をフォームを使用して、自動化されたブラウザのポストを持ってしたくない場合、あなたはこのような何かのでごNGクリック機能で$ http.postを持つことができます。

<input ng-model="filters.dateFrom" type="text" placeholder="Select a starting date"> 
<button ng-click="BtnClick();">Post to server</button> 
角度コントローラで

$scope.BtnClick = function() { /* Post the values using $http.post and you can access to the input values using filters.dateFrom and filters.dateTo */ 
+0

私が述べてきたはずです申し訳ありませんが、私は、データベースとしてのSAP HANAを使用していて、SQLデータ型は、タイムスタンプで、手順が取ります■この形式の日付= 'yyyyMMdd'。 –

関連する問題