2013-05-01 3 views
0

Это мой код, который выполняет два метода:java.lang.NumberFormatException: Для ввода строки: «тип»

<h:panelGroup> <br /><br /> 
    <h:outputLabel id="yearLbl" value="Year:" /> 
    <h:outputLabel id="selectType" /><br /> 
    <h:selectOneMenu id="type" value="#{clController.type}"> 
     <f:selectItem itemValue="2013" itemLabel="2013" /> 
     <f:selectItem itemValue="2012" itemLabel="2012" /> 
     <f:selectItem itemValue="2011" itemLabel="2011" /> 
     <f:selectItem itemValue="2010" itemLabel="2010" /> 
     <f:selectItem itemValue="2009" itemLabel="2009" /> 
     <f:selectItem itemValue="2008" itemLabel="2008" /> 
    </h:selectOneMenu> 
    <h:commandButton type="submit" onclick="#{clController.getTotal(clController.type)}" action="#{clController.getPaymentByMonth(clController.type)}" id="stateInfo" value="Show Monthly " >    
    </h:commandButton> 
</h:panelGroup> 

Эти функции называются:

public DataModel getPaymentByMonth(String year) {    
    this.session = HibernateUtil.getSessionFactory().getCurrentSession(); 

    List<CustomerPayment> paymentList = null; 
    try { 
     org.hibernate.Transaction tx = session.beginTransaction(); 
     Query q = session.createQuery("from CustomerPayment where DATE like '%" + year + "'"); 
     paymentList = (List<CustomerPayment>) q.list(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return paymentDataModel = new ListDataModel(paymentList);  
} 

public DataModel getTotal(String year) { 
    this.session = HibernateUtil.getSessionFactory().getCurrentSession(); 

    List<CustomerPayment> total = null; 
    try { 
     org.hibernate.Transaction tx = session.beginTransaction(); 
     System.out.println(year); 
     Query q = session.createQuery("select c.type, c.date, sum(c.amount) from CustomerPayment c where c.date LIKE '%"+year+"' group by c.type"); 
     System.out.println("select c.type, c.date, sum(c.amount) from CustomerPayment c where c.date LIKE '%"+year+"' group by c.type"); 
     total = (List<CustomerPayment>) q.list(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return totalDataTable = new ListDataModel(total);  
} 

Проблема в том, что я получите эту ошибку:

java.lang.NumberFormatException: For input string: "type" 

Тип означает годы, но я даю ошибку. Когда я печатаю тип в экран, он печатает для ex 2013, почему я получаю эту ошибку?

Полный трассировки стека:

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:481) 
    at java.lang.Integer.parseInt(Integer.java:514) 
    at javax.el.ArrayELResolver.coerce(ArrayELResolver.java:166) 
    at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46) 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:183) 
    at org.apache.el.parser.AstDeferredExpression.getValue(AstDeferredExpression.java:44) 
    at org.apache.el.parser.AstCompositeExpression.getValue(AstCompositeExpression.java:50) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) 
    at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.encodeChildren(OutputLinkRenderer.java:124) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) 
    at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385) 
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) 
    at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:679) 
+1

да, полный StackTrace будет полезно. –

ответ

-1

вы уверены, что нет никаких хвостовых пробелов или ведущие пробельные

new Integer("2013") - Woks 
new Integer(" 2013") - will not work 
+2

Это не проблема: из-за исключения ясно, что система пытается проанализировать строку '' type "' как число (и, что неудивительно, не удается). –

-1

Хорошо, давайте анализировать что-то. в соответствии с полной трассировкой стека.

эта ошибка возникла из фазы визуализации.

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 

так произошло после действия метод call.

и эта ошибка была брошена, когда компонент какой-то ребенок в OutputLink пытается закодировать значение (значение оказывают)

at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.encodeChildren(OutputLinkRenderer.java:124) 

и OutputLink, кажется, живут в какой-то таблице.

at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385) 
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162) 

поэтому, вы должны проверить ссылку в таблице, которая находится в другом месте вашего файла макета.

1
java.lang.NumberFormatException: For input string: "type" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:481) 
    at java.lang.Integer.parseInt(Integer.java:514) 
    at javax.el.ArrayELResolver.coerce(ArrayELResolver.java:166) 
    at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46) 

Исключение говорит, что вы пытаетесь получить доступ к массиву в EL с использованием нецелого индекса type, что-то вроде этого в исходном коде Java:

Object[] array = getItSomehow(); 
array["type"]; 

Это, очевидно, не так. Трассировка стека намекает, что у Вас есть

<h:dataTable value="#{bean.customerPayments}" var="customerPayment"> 
    ... 
    <h:inputText value="#{customerPayment.type}" /> 

Исключение, само по себе намекает, что customerPayments является List<Object[]> и не List<CustomerPayment> в противоположность тому, что вы ожидали, и (неправильно !!) downcasted. Вы не выбираете c, как в SELECT c FROM CustomerPayment c, но только отдельные свойства, поэтому каждая запись представлена ​​как Object[].

Одним из решений было бы придерживаться List<Object> и использовать индексы вместо имен свойств для доступа к ним. Вы выбрали c.type в качестве 1-го столбца, поэтому он имеет индекс массива 0:

<h:dataTable value="#{bean.customerPayments}" var="customerPayment"> 
    ... 
    <h:inputText value="#{customerPayment[0]}" /> 
Смежные вопросы