Java.lang.NumberFormatException after trying to represent values ​​from a query

public List findCatalog() {
    Query query = getEntityManager().createQuery("SELECT pc.productCatalog, p.name, p.product FROM ProductCatalog pc JOIN pc.products p");
    return query.getResultList();
}

Hello, with such a request, my application compiles in order. But when I open the page on which this request is executed, I get the following error:

org.apache.jasper.JasperException: java.lang.NumberFormatException: for input line: "productCatalog"

ProductCatalog is my primary key, but it happens when I just include the name column

org.apache.jasper.JasperException exception: java.lang.NumberFormatException: for input line: "name" root cause

java.lang.NumberFormatException: for input line: "name"

, 1 . , , Pro JPA 2, Java EE 6, googled alot. - ManyToMany. , * product_catalog * * product_product_catalog. . NetBeans EclipseLink.

ProductCatalog

@ManyToMany
    @JoinTable(name = "product_product_catalog",
    joinColumns = {
        @JoinColumn(name = "product_catalog")
    },
    inverseJoinColumns = {
        @JoinColumn(name = "product")
    })
    private Collection<Product> products;

product product_catalog . , , , ? , , , , , ? , , , .

getServletContext().setAttribute("productCatalog", productCatalogFacade.findCatalog());

JSP

<table>
            <c:forEach var="list" items="${productCatalog}" varStatus="iter">
                <tr>
                    <td>${list.productCatalog}</td>
                    <td>${list.product}</td>
                    <td>${list.name}</td>
                </tr>
            </c:forEach>
        </table>

SQL-,

SELECT PPC.product_product_catalog, PPC.product_catalog, PPC.product, P.name, PC.name AS  "catalog name", P.code, P.description, P.price, P.producer
FROM product_catalog PC
INNER JOIN product_product_catalog PPC ON PC.product_catalog = PPC.product_catalog
INNER JOIN product P ON P.product = PPC.product

, , , :

WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.NumberFormatException: For input string: "productCatalog"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:375)
        at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:195)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
        at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
        at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
        at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
        at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1007)
        at org.apache.jsp.index_jsp._jspx_meth_c_forEach_0(index_jsp.java from :206)
        at org.apache.jsp.index_jsp._jspService(index_jsp.java from :137)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
+3
5

SELECT,

SELECT pc.productCatalog, p.name, p.product ...

Object[], :

<c:forEach var="list" items="${productCatalog}" varStatus="iter"><tr>
    <td>${list[0]}</td> 
    <td>${list[2]}</td>
    <td>${list[1]}</td>
</tr></c:forEach> 
+8

Java EE7, JSF2.2, JPA2 @NamedStoredProcedureQuery, @axtavt (+ 1). , , Object [] .

, :

@NamedStoredProcedureQuery(
    name = "getJoinedSiteData",
    procedureName = "func_joined_site_data",
    resultClasses = Site.class,
    parameters = {@StoredProcedureParameter(mode = IN, name = "site_id", type = Integer.class)}
)
public class Site implements Serializable{
...
}

, , :

public List<Site> getItems(Integer siteId){
            StoredProcedureQuery query = em.createNamedStoredProcedureQuery("getJoinedSiteData");
    return query.setParameter("site_id", siteId).getResultList();
}

JSF2.2, ui: repeat h: dataTable, . .

<h:dataTable value="#{controller.getItems(someSiteId)}" var="item">
    <h:column>
        <f:facet name="header">
            <h:outputText value="Site Name"/>
        </f:facet>
        <h:outputText value="#{item.name}"/>
    </h:column>
</h:dataTable>
+1

- Integer.parseInt productCatalog, . . .

0

, , .

,

 <td>${list.productCatalog}</td>

.

, Jasper ( JSP) , "list" - , , "list.0" "list.1"

?

  • , JSP, , , JSP.
  • The stack trace has at org.apache.jsp.index_jsp._jspx_meth_c_forEach_0, which means that the exception occurs inside the foreach
  • The stack trace also has at javax.el.ArrayELResolver.toInteger, which means that it is trying to resolve the array expression.

I am sure that if you change your JSP to

<table>
  <c:forEach var="list" items="${productCatalog}" varStatus="iter">
    <tr>
      <td>This is a row</td>
    </tr>
  </c:forEach>
</table>

your exception will disappear. This will prove that the problem is caused by an attempt to access the properties list, and then you will need to decide why Jasper considers it to listbe an array.

0
source

Source: https://habr.com/ru/post/1794579/


All Articles