2012-08-07 55 views
0

我有一个bean类:在JSTL访问场一类的是否为另一个类

public class Event{ 
    private Customer customer 
    private String stringdate 

    public Event(){} 

    /*all getters and setters here*/ 
} 

public class Customer{ 
    private int custId 
    private String custname 

    public Customer(){} 

    /*all getters and setters here*/ 
} 

是否有显示使用JSTL在JSP页面上的内容的方式?

编辑: eventsView是从servlet传入的事件列表。当它是一个int字段时,我可以显示“cust”变量,但是当我将其更改为一个自定义类时,我无法显示它,因为我得到下面的异常。

<c:forEach items="${ eventsView }" var="events" varStatus="index"> 
        <tr> 
         <td>${ index.count }</td> 
         <td>${ events.customer.custid }</td> 
         <td>${ events.stringdate }</td> 

        </tr> 
</c:forEach> 

感谢

堆栈跟踪:

SEVERE: Servlet.service() for servlet [jsp] in context with path [/CaspinolCustTest] threw exception [An exception occurred processing JSP page /event.jsp at line 32 

29:   <c:forEach items="${ eventsView }" var="events" varStatus="index"> 
30:        <tr> 
31:       <td>${ index.count }</td> 
32:       <td>${ events.customer.custId }</td> 
33:       <td>${ events.stringdate }</td> 

Stacktrace:] with root cause 
java.lang.NumberFormatException: For input string: "customer" 
    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 javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985) 
    at org.apache.jsp.event_jsp._jspx_meth_c_005fforEach_005f0(event_jsp.java:148) 
    at org.apache.jsp.event_jsp._jspService(event_jsp.java:100) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    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:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    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:987) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:679) 
+0

使用另一个点。你甚至尝试过吗? – 2012-08-07 13:37:53

+0

是的,我确实尝试过。 – SneakyMummin 2012-08-07 13:50:05

+0

发生了什么? – 2012-08-07 13:50:38

回答

0
<c:forEach items="${ class2List }" var="element" varStatus="index"> 
    <tr> 
     <td>${ index.count }</td> 
     <td>${ element.test1.foo }</td> <%-- calls element.getTest1().getFoo() --%> 
     <td>${ element.test2.bar.baz }</td> <%-- calls element.getTest2().getBar().getBaz() --%> 
    </tr> 
</c:forEach> 

注意,我改名listelement,自变量是Class2中的一个实例,而不是一个列表。还要注意,与Java不同(它会导致NullPointerException),如果链中的一个bean为空,EL将自动将表达式评估为null

+0

我善良o已经尝试过。我得到java.lang.NumberFormatException:对于输入字符串:“test1” – SneakyMummin 2012-08-07 13:51:35

+1

上面的代码没有办法抛出这样的异常。向我们展示您的类的代码,您的JSP的代码以及异常的完整堆栈跟踪。 – 2012-08-07 13:53:10

1

JSTL使用公共getter方法。您需要公共方法:在Event类中使用getCustomer(),getStringDate()和在Customer类中使用getCustId()。

+0

我有类中的所有getter和setter。我更新了这个问题。 – SneakyMummin 2012-08-07 14:56:52