javascript
  • java
  • angularjs
  • servlets
  • datepicker
  • 2016-07-06 43 views 0 likes 
    0

    我想添加一个日期过滤器到我的代码。我想将AngularJS Date-Picker中选择的日期传递给Java Servlet,然后通过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 Servlet

        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

    如果你不想使用表单,并具有自动浏览器后,你可以有$ http.post在NG-点击功能,所以是这样的:

    <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数据类型是时间戳,并且该过程采取s这种格式的日期='yyyyMMdd'。 –

    相关问题