2014-10-23 2 views
2

У меня есть ниже методПолучение общего количества в колонке

public void footerSet() { 

    // Calculate total sum 
    double totalSum = 0.0; 
    // double totalMargin = 0.0; 
    for (int i = 0; i < ic.size(); i++) { 
     Item item = ic.getItem(ic.getIdByIndex(i)); 

     try { 

      double valuetotal = Double.parseDouble((String) item 
        .getItemProperty("Amount").getValue()); 

      totalSum += valuetotal; 
      System.out.println(">>>2222 : " + totalSum); 

      // System.out.println(">>>2222 : " + totalSum); 
     } catch (NumberFormatException e) { 
      // System.out.println("not a number"); 
      e.printStackTrace(); 
     } 
    } 
    ProductTableGlobal.setColumnFooter("Outlet", "Total"); 
    ProductTableGlobal.setColumnFooter("Amount", String.valueOf(totalSum)); 

} 

и тип ниже

icLoaded.addContainerProperty("Outlet", String.class, null); 
    icLoaded.addContainerProperty("Amount", String.class, null); 

и в модели я есть ниже

 //NumberFormat numberFormat = new DecimalFormat("#,###.00"); 

     double totalAmounts = totalAmount; 
    passTable.getContainerProperty(UID, "Amount").setValue(
       numberFormat.format((totalAmounts))); 

Когда я попытайтесь суммировать итоги, я получаю только первый столбец. Ниже журналы

2222: 460,0
не число

>>>2222 : 460.0 
>>>2222 : 460.0 

Ниже трассировки стека

INFO: Установка AtmosphereInterceptor Track Message Size Interce ptor используя | с приоритетом BEFORE_DEFAULT

2222: 460,0

java.lang.NumberFormatException: For input string: "2,336.00" 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250) 
at java.lang.Double.parseDouble(Double.java:540) 
at com.zocha.reports.TaxByOutlet.footerSet(TaxByOutlet.java:280) 
at com.zocha.reports.TaxByOutlet.OutletSalesView(TaxByOutlet.java:84) 
at com.zocha.reports.TaxByOutlet.enter(TaxByOutlet.java:62) 
at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:571) 
at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:526) 
at valo.ValoThemeUI$5.buttonClick(ValoThemeUI.java:551) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) 
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) 
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:978) 
at com.vaadin.ui.Button.fireClick(Button.java:393) 
at com.vaadin.ui.Button$1.click(Button.java:57) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168) 
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) 
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:287) 
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:180) 
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:93) 
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) 
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1402) 
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:305) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

>>>2222 : 460.0 
>>>2222 : 460.0 

Note: 2,336.00 is the second value that needs to be added and so on 

ответ

4

Прежде всего вы настраиваете колонки колонтитул внутри цикла ваш следующий код должен быть вне цикла,

ProductTableGlobal.setColumnFooter("Outlet", "Total"); 
ProductTableGlobal.setColumnFooter("Amount",String.valueOf(totalSum)); 

Во-вторых вы бросаете на String и использование toString, а также использовать один из них, во время второго значения итерации вы получаете не может быть разобран вдвое, так что вы получили не число которой вы печать int catch блок, чтобы получить больше информации о конкретной проблеме, для этого вы должны использовать e.printStackTrace(); в блоке catch.

2222 : 460.0 
not a number 

SO, из StackTrace мы можем видеть, что значение, которое вы получаете от Amount собственности

2,336.00 
^ 

Таким образом, это значение не может быть разобрано в два раза из-за , в String УПРОЩЕННЫЙ решением может быть использование #replace, и вам лучше использовать проверку нулевого значения перед синтаксическим анализом, чтобы исключить исключение из нулевого указателя.

double valuetotal=0.0; 
if(item!=null && item.getValue()!=null){ 
    String tempString = item.getItemProperty("Amount") 
          .getValue() 
          .toString() 
          .replace(",",""); 
    valuetotal=Double.parseDouble(tempString); 
} 
+0

Я отредактировал и изменил в соответствии с вашими изменениями, но проблема все еще сохраняется. – pmaingi

+0

Я добавил трассировку стека. Примечание: 2,336.00 - это второе значение, которое необходимо добавить и так далее. – pmaingi

+1

Спасибо большое. Теперь он работает хорошо. NB - я добавил ProductTableGlobal.setColumnFooter ("Amount", \t \t \t numberFormat.format (totalSum)); – pmaingi

Смежные вопросы