【问题标题】:getting values from arraylist in jstl从jstl中的arraylist获取值
【发布时间】:2012-11-26 18:38:09
【问题描述】:

我试图从数组列表中获取值(从 servlet 类发送此数组列表)并将它们显示在 jsp 页面上。我正在使用 jstl 标签。我看了一些例子,我不知道为什么,但程序总是出错。这是我的错误信息:

org.apache.jasper.JasperException: An exception occurred processing JSP page /result.jsp at line 26

23:    </br></br>Match Score: <c:out value="${score}"/>
24:    <c:forEach items="${alternativedrugs}" var="alternativedrug">
25:    </br></br>
26:    </br></br>Drug <c:out value="${alternativedrug.name}"></c:out>  
27:    </br></br>Drug Description: <c:out value="${alternativedrug.description}"></c:out>  
28:    </br></br>Drug Targets:  <c:out value="${alternativedrug.targets}"></c:out>  
29:    </br></br>Drug Interactions: <c:out value="${alternativedrug.interactions}"></c:out> 

这是我的jstl代码:

This Drug Found
<c:forEach items="${alternativedrugs}" var="alternativedrug">
</br></br>Drug Name: <c:out value="${alternativedrug.getName()}"/>
</br></br>Drug Description:     <c:out value="${alternativedrug.getDescription()}"/>
</br></br>Drug Targets:     <c:out value="${alternativedrug.getTargets()}"/>
</br></br>Drug Interactions:    <c:out value="${alternativedrug.getInteractions()}"/>
</br></br>Match Score:  <c:out value="${score}"/>

对象类:

package drugtargetdisease;

import java.util.ArrayList;


public class MyDrug {

ArrayList<String> partner = new ArrayList();

private String targets = "";
private String name ="";
private String description ="";
private String interactions = "";
public MyDrug(){

}
public String getTargets() {
    return targets;
}
public void setTargets(String targets) {
    this.targets = targets;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getDescription() {
    return description;
}
public void setDescription(String description) {
    this.description = description;
}
public String getInteractions() {
    return interactions;
}
public void setInteractions(String interactions) {
    this.interactions = interactions;
}

}

Servlet 部分(alternativedrugs 是 MyDrug 对象的 ArrayList):

otherdrug.setName((String) myentity.getProperty("drug"));
        otherdrug.setDescription(((Text) myentity.getProperty("description")).getValue());
        otherdrug.setInteractions(((Text) myentity.getProperty("interactions")).getValue());
        otherdrug.setTargets(((Text) myentity.getProperty("target")).getValue());
        if(!otherdrug.getName().equals(maindrug.getName())){
        if(MaxScore <= compare.getExpected(maindrug.getTargets(), otherdrug.getTargets(),maindrug.getInteractions(), otherdrug.getInteractions())){
            MaxScore = compare.getExpected(maindrug.getTargets(), otherdrug.getTargets(),maindrug.getInteractions(), otherdrug.getInteractions());
            alternativedrugs.add(otherdrug);
        }
req.setAttribute("alternativedrugs", alternativedrugs);
    req.setAttribute("score", MaxScore);
        try {
            rd.forward(req, resp);
        } catch (ServletException e) {
            e.printStackTrace();
        }    

完整的跟踪:

 Stacktrace:
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23)
at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:59)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at guestbook.CompareServlet.doPost(CompareServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:110)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:380)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: javax.el.PropertyNotFoundException: Could not find property name in class guestbook.MyDrug
at javax.el.BeanELResolver.toBeanProperty(BeanELResolver.java:430)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:290)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:231)
at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935)
at org.apache.jsp.result_jsp._jspx_meth_c_005fout_005f1(result_jsp.java:201)
at org.apache.jsp.result_jsp._jspx_meth_c_005fforEach_005f0(result_jsp.java:156)
at org.apache.jsp.result_jsp._jspService(result_jsp.java:99)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
... 55 more

【问题讨论】:

  • 你没有更长的堆栈跟踪吗?如果是这样,请将其完全粘贴。另外,请向我们展示存储在列表中的对象的类的源代码。

标签: jsp jstl


【解决方案1】:

所以,错误信息是Could not find property name in class guestbook.MyDrug

这意味着没有方法

public String getName()

guestbook.MyDrug。 (注意它可以返回任何东西,而不仅仅是字符串。但由于属性是name,我假设它的类型是String)。

JSP EL 访问 bean 属性。它不会访问您班级的公共领域。使用公共字段是一种不好的做法,JSP 不鼓励这样做。将您的字段设为私有,并在必要时提供访问器(getter 和 setter)。如果你想从 JSP 中读取一个字段,你需要一个 getter。

【讨论】:

  • 我按照您的指示操作,但仍然遇到同样的错误。更新我的代码。
  • 您的 JSTL 代码很好。不好的是使用公共字段而不是吸气剂。 JSTL 代码应保持为&lt;c:out value="${alternativedrug.name}"/&gt;。这段 JSTL 代码将调用 MyDrug 对象的 getName() 方法。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 2012-05-20
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
相关资源
最近更新 更多