2013-07-24 4 views
-2

아래 메서드에서 2 날짜 try/catch 블록으로 발급하고 있습니다. 나는이 방법을 쳤을 때 내가 널 포인터 예외를 얻고있다 :간단한 날짜 형식 구문 분석이 작동하지 않습니다.

private ModelAndView performHistorySearch(final HttpServletRequest request){ 
    JsCustomerSession sess = (JsCustomerSession) getRequestHelper().getCustomerSession(request); 
    JsCustomer customer = sess.getShopper().getCustomer(); 
    ExtStore store = (ExtStore) sess.getShopper().getCurrentShoppingCart().getStore(); 
    RemoteOrderHistoryService orderHistoryService = remoteServiceLocator.getOrderHistoryService(store); 
    Map<String, Object> model = new HashMap<String, Object>(); 

    DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy"); 
    Calendar cal = Calendar.getInstance(); 
    String defaultEnd = formatter.format(cal.getTime()); 
    cal.add(Calendar.DATE, -30); 

    String defaultStart = formatter.format(cal.getTime()); 
    String startStr = ServletRequestUtils.getStringParameter(request, "start"); 
    Date end = formatter.parse(ServletRequestUtils.getStringParameter(request, "end", defaultEnd)); 
    String searchString = ServletRequestUtils.getStringParameter(request, "searchString", "").trim(); 
    String show = ServletRequestUtils.getStringParameter(request, "show", ""); 
    String searchType = ServletRequestUtils.getStringParameter(request, "search-filter", ""); 

    if(startStr == null) { 
     if(searchString != "") { 
      Calendar newStart = Calendar.getInstance(); 
      newStart.add(Calendar.YEAR, -25); 
      startStr = formatter.format(newStart.getTime()); 
     } else { 
      startStr = defaultStart; 
     } 
    } 

    if (show == ""){ 
     show = 'all'; 
    } 

    if(store.getPosType().equals(ExtStoreImpl.POS_TYPE_INFOR) || store.getPosType().equals(ExtStoreImpl.POS_TYPE_DATABASE)){ 
     searchString += 'show: ' + show + "type: " + searchType; 
    } 

    Date start = formatter.parse(startStr); 

    log.debug("SEARCHING FROM " + start + ' TO ' + end); 
    log.debug("SEARCHING FOR " + searchString); 
    log.debug("SEARCHING TYPE " + searchType); 

    List<OrderHistoryBean> ohs = orderHistoryService.getOrderHistory(customer, start, end, searchString); 

    if (store.getPosType().equals(ExtStoreImpl.POS_TYPE_INFOR) || store.getPosType().equals(ExtStoreImpl.POS_TYPE_DATABASE)){ 
     model.put("orders", ohs); 
    } else { 
     List<OrderHistoryBean> returnOhs = new ArrayList<OrderHistoryBean>(); 
     ohs.each({oh -> 
      if(oh.getType() != 'Payment') { 
       if(show == 'all') { 
        returnOhs.add(oh); 
        log.debug('adding ' + oh.getOrderNumber()); 
       } else if (show == 'invoice' && oh.getType() == 'Invoice') { 
        returnOhs.add(oh); 
        log.debug('adding ' + oh.getOrderNumber()); 
       } else if (show == 'open' && oh.getType() != 'Invoice') { 
        returnOhs.add(oh); 
        log.debug('adding ' + oh.getOrderNumber()); 
       } 
      } 
     }) 
     log.debug(returnOhs.size()); 
     model.put("orders", returnOhs); 
    } 

    return new ModelAndView(this.getSuccessView(), model); 
} 

내가 붙어있어, 어떤 도움이 것 : 또한

private List<HashMap<String,Object>> getOrderHistoryData(final HttpServletRequest request) 
{ 
    List<HashMap<String,Object>> productInfo = new ArrayList<HashMap<String,Object>>(); 
    JsCustomerSession sess = (JsCustomerSession) getRequestHelper().getCustomerSession(request); 
    JsCustomer customer = (JsCustomer) sess.getShopper().getCustomer(); 
    ExtStore store = (ExtStore) sess.getShopper().getCurrentShoppingCart().getStore(); 
    RemoteOrderHistoryService orderHistoryService = remoteServiceLocator.getOrderHistoryService(store); 

    DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy", Locale.ENGLISH); 
    Calendar cal = Calendar.getInstance(); 
    String defaultEnd = formatter.format(cal.getTime()); 
    log.debug("Your default end string is: " + defaultEnd); 
    cal.add(Calendar.DATE, -30); 

    String defaultStart = formatter.format(cal.getTime()); 
    log.debug("Your defaultStart string is: " + defaultStart); 
    String startStr = ServletRequestUtils.getStringParameter(request, "start", defaultStart); 
    String endStr = ServletRequestUtils.getStringParameter(request, "end", defaultEnd); 
    log.debug("Your start string is: " + startStr); 

    Date end; 
    try { 
     end = formatter.parse(endStr); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     end = new Date(); 
    } 

    String searchString = ServletRequestUtils.getStringParameter(request, "searchString", "").trim(); 
    String show = ServletRequestUtils.getStringParameter(request, "show", ""); 
    String searchType = ServletRequestUtils.getStringParameter(request, "search-filter", ""); 

    if(startStr.equals(defaultStart)) 
    { 
     if(searchString != "") 
     { 
      Calendar newStart = Calendar.getInstance(); 
      newStart.add(Calendar.YEAR, -25); 
      startStr = formatter.format(newStart.getTime()); 
     } 
     else 
     { 
      startStr = defaultStart; 
     } 
    } 

    if (show == "") 
    { 
     show = "all"; 
    } 

    if(store.getPosType().equals(ExtStoreImpl.POS_TYPE_INFOR) || store.getPosType().equals(ExtStoreImpl.POS_TYPE_DATABASE)) 
    { 
     searchString += "show: " + show + "type: " + searchType; 
    } 


    Date start; 
    try { 
     start = formatter.parse(startStr); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     start = new Date(); 
    } 

    log.debug("SEARCHING FROM " + start + " TO " + end); 
    log.debug("SEARCHING FOR " + searchString); 
    log.debug("SEARCHING TYPE " + searchType); 

    List<OrderHistoryBean> ohs = orderHistoryService.getOrderHistory(customer, start, end, searchString); 
    HashMap<String,Object> excelRowData = new HashMap<String,Object>(); 

    if (store.getPosType().equals(ExtStoreImpl.POS_TYPE_ECLIPSE)) 
    { 
     for(OrderHistoryBean orderHistory : ohs) 
     { 
      String shipToFirstName = orderHistory.getShipTo().getFirstName().toString(); 
      String shipToLastName = orderHistory.getShipTo().getLastName().toString(); 
      String shipToFirstAndLastName = shipToFirstName + "" + shipToLastName; 

      excelRowData.put("Order#", orderHistory.getReferenceNumber()); 
      excelRowData.put("PO#", orderHistory.getPoNumber()); 
      excelRowData.put("Ordered", orderHistory.getPostedDate()); 
      excelRowData.put("Shipped", orderHistory.getShippedDate()); 
      excelRowData.put("Status", orderHistory.getStatus()); 
      excelRowData.put("Ship To", shipToFirstAndLastName); 
      excelRowData.put("Amount", orderHistory.getAmount()); 
      productInfo.add(excelRowData); 
     } 
    } 
    else if (store.getPosType().equals(ExtStoreImpl.POS_TYPE_DATABASE)) 
    { 
     for(OrderHistoryBean orderHistory : ohs) 
     { 
      excelRowData.put("Reference#", orderHistory.getOrderNumber()); 
      excelRowData.put("Posted Date", orderHistory.getPostedDate()); 
      excelRowData.put("PO/Job#", orderHistory.getPoNumber()); 
      excelRowData.put("Amount", orderHistory.getAmount()); 
      productInfo.add(excelRowData); 
     } 
    } 
    else if (store.getPosType().equals(ExtStoreImpl.POS_TYPE_INFOR)) 
    { 
     for(OrderHistoryBean orderHistory : ohs) 
     { 
      excelRowData.put("Order Number", orderHistory.getOrderNumber()); 
      excelRowData.put("PO Number", orderHistory.getPoNumber()); 
      excelRowData.put("Order Date", orderHistory.getPostedDate()); 
      excelRowData.put("Status", orderHistory.getStatus()); 
      excelRowData.put("Order Total", orderHistory.getAmount()); 

      productInfo.add(excelRowData); 
     } 
    } 
    else if (store.getPosType().equals(ExtStoreImpl.POS_TYPE_NRT)) 
    { 
     for(OrderHistoryBean orderHistory : ohs) 
     { 
      excelRowData.put("Order Number", orderHistory.getOrderNumber()); 
      excelRowData.put("Store", store); 
      excelRowData.put("Order Date", orderHistory.getPostedDate()); 
      excelRowData.put("Order Total", orderHistory.getAmount()); 

      productInfo.add(excelRowData); 
     } 
    } 
    return productInfo; 
} 

을, 기본적으로 동일한 코드 내 그루비 클래스에서 잘 작동합니다 감사하겠습니다.

+0

당신은 자바에서 예외를 잡을 필요가있다. 또는 던져 선언하십시오,'getOrderHistoryData'의 정의에'throws ParseException'을 추가하지 마십시오. –

답변

0

이 시도 :

Date end; 
try { 
    end = formatter.parse(endStr); 
} catch (ParseException e) { 
    e.printStackTrace(); 
    throw e; 
} 

또는

Date end; 
try { 
    end = formatter.parse(endStr); 
} catch (ParseException e) { 
    e.printStackTrace(); 
    end = new Date(); // default to now 
} 
+0

작동하지 않습니다. 로컬 변수에 초기화되지 않은 오류가 발생합니다. –

+0

날짜 끝 = null; 그런 다음 try 블록. – morpheus05

+0

그랬습니까. Null 포인터 예외를 가져옵니다. –

관련 문제