2015-04-17 118 views
0

我使用spring数据neo4j工作,我有一个存储库推荐电影,我认为密码没有问题,我可以得到推荐,但我无法获得Movie.title的价值和评级,为什么它显示电影ID不属性推荐.Class,在我的日志和错误信息,你可以看到,为什么? 我有severl类似的问题,似乎不能得到在JSP中的价值吗?帮帮我非常感谢你。心人 recommendation.class获取MovieRecommendation抛出异常

package com.oberon.fm.domain; 
import org.springframework.data.neo4j.annotation.QueryResult; 
@QueryResult 
public class MovieRecommendation { 

Movie movie; 
int rating; 

@Query("match (user:User {login: {0}})-[r:RATED]->(movie)<-[r2:RATED]-(other)-[r3:RATED]->(otherMovie) " 
     + " where r.stars >= 3 and r2.stars >= r.stars and r3.stars >= r.stars " 
     + " with otherMovie, avg(r3.stars) as rating, count(*) as cnt" 
     + " order by rating desc, cnt desc" 
     + " return otherMovie limit 10") 
List<MovieRecommendation> getRecommendations(String login); 

我控制器

@RequestMapping(value = "/user", method = RequestMethod.GET) 
public String profile(Model model, HttpServletRequest request) { 
    // User user=populator.getUserFromSession(); 

    HttpSession session = request.getSession(false); 
    User user = (User) session.getAttribute("user"); 
    model.addAttribute("user", user); 
    if (user != null) { 
     List<MovieRecommendation> mr = movieRepository.getRecommendations(user.getLogin()); 
     model.addAttribute("recommendations", mr); 
    } 
    return "user/index"; 
} 

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%[email protected] id="user" type="com.oberon.fm.domain.User"--%> 
<%[email protected] id="recommendations"type="java.util.List<com.oberon.fm.domain.MovieRecommendation>"--%> 
<%[email protected] id="recommendation"type="com.oberon.fm.domain.MovieRecommendation"--%> 
<html> 
<head> 
<title>Profile</title> 
<link rel="stylesheet" type="text/css" href="/Web/css/style.css"/> 

</head> 
<body> 
<div class="span-third"> 
     <h2>Your recommendations</h2> 
    </div> 
    <div class="span-third last"> 
     <h2>${fn:length(recommendations)}</h2> 
    </div> 
     <ul class="rated-movies-list span-all last"> 
      <c:choose> 
       <c:when test="${not empty recommendations}"> 
        <c:forEach items="${recommendations}" var="recommendation"> 
         <c:set var="movie" value="${recommendation.movie}"/> 
         <c:set var="stars" value="${recommendation.rating}"/> 
         <li> 
          <h4> <a href="<c:url value="/movies/${movie.id}" />"><c:out value="${movie.title}"/> 
           (${movie.year}) - &quot;${movie.tagline}&quot;</a> 

          <img class="rating" alt="${stars} stars" src="<c:url value="/images/rated_${stars}.png" />"/> 
          </h4> 
         </li> 
        </c:forEach> 
       </c:when> 
       <c:otherwise> 
        There are no recommendations for you, perhaps you have to add some friends? 
       </c:otherwise> 
      </c:choose> 
     </ul> 
    <div class="break"></div> 
    </div> 
</div> 

我能得到的建议 日志和错误信息的长度

16:19:32.403 [http-nio-8080-exec-8] DEBUG o.s.w.b.a.s.HandlerMethodInvoker - Invoking request handler method: publicjava.lang.String com.oberon.fm.controller.UserController.profile(org.springframework.ui.Model, javax.servlet.http.HttpServletRequest) 
16:19:32.403 [http-nio-8080-exec-8] DEBUG o.s.t.jta.JtaTransactionManager - Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 
16:19:32.404 [http-nio-8080-exec-8] DEBUG o.s.d.n.s.q.CypherQueryEngineImpl - Executing cypher query: match (user:User {login: {0}})-[r:RATED]->(movie)<-[r2:RATED]-(other)-[r3:RATED]->(otherMovie) where r.stars >= 3 and r2.stars >= r.stars and r3.stars >= r.stars with otherMovie, avg(r3.stars) as rating, count(*) as cnt order by rating desc, cnt desc return otherMovie limit 10 params {0=micha} 
16:19:32.739 [http-nio-8080-exec-8] DEBUG o.s.t.jta.JtaTransactionManager - Initiating transaction commit 
16:19:32.740 [http-nio-8080-exec-8] DEBUG c.o.fm.controller.UserController -()()()()()()()()()()()[[email protected], [email protected]] 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'user/index' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'user/index'; URL [/pages/user/index.jsp]] in DispatcherServlet with name 'context' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.view.JstlView - Added model object 'user' of type [com.oberon.fm.domain.User] to request in view with name 'user/index' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.view.JstlView - Added model object 'recommendations' of type [java.util.ArrayList] to request in view with name 'user/index' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.view.JstlView - Added model object 'org.springframework.validation.BindingResult.user' of type [org.springframework.validation.BeanPropertyBindingResult] to request in view with name 'user/index' 
16:19:32.740 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.view.JstlView - Forwarding to resource [/pages/user/index.jsp] in InternalResourceView 'user/index' 
16:19:33.838 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - Error rendering view [org.springframework.web.servlet.view.JstlView: name 'user/index'; URL [/pages/user/index.jsp]] in DispatcherServlet with name 'context' 
org.apache.jasper.JasperException: An exception occurred processing JSP page /pages/user/index.jsp at line 86 

83:    <c:choose> 
84:     <c:when test="${not empty recommendations}"> 
85:      <c:forEach items="${recommendations}" var="recommendation"> 
86:       <c:set var="movie" value="${recommendation.movie}"/> 
87:       <c:set var="stars" value="${recommendation.rating}"/> 
88:       <li> 
89:        <h4> <a href="<c:url value="/movies/${movie.id}" />"><c:out value="${movie.title}"/>: 
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) ~[jasper.jar:8.0.15] 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) ~[jasper.jar:8.0.15] 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) ~[jasper.jar:8.0.15] 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) ~[jasper.jar:8.0.15] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) [servlet-api.jar:na] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15] 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) ~[catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) ~[catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) ~[catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) ~[catalina.jar:8.0.15] 
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) ~[spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) ~[spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) [servlet-api.jar:na] 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) [servlet-api.jar:na] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15] 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15] 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.1.5.RELEASE.jar:4.1.5.RELEASE] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.15] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) [catalina.jar:8.0.15] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8.0.15] 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:8.0.15] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) [catalina.jar:8.0.15] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.0.15] 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) [catalina.jar:8.0.15] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8.0.15] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) [catalina.jar:8.0.15] 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) [tomcat-coyote.jar:8.0.15] 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) [tomcat-coyote.jar:8.0.15] 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) [tomcat-coyote.jar:8.0.15] 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) [tomcat-coyote.jar:8.0.15] 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) [tomcat-coyote.jar:8.0.15] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05] 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.15] 
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05] 
Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /pages/user/index.jsp(86,26) '${recommendation.movie}' Property 'movie' not found on type com.oberon.fm.domain.MovieRecommendation 
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:120) ~[jasper.jar:8.0.15] 
at org.apache.jsp.pages.user.index_jsp._jspx_meth_c_005fset_005f3(index_jsp.java:879) ~[na:na] 
at org.apache.jsp.pages.user.index_jsp._jspx_meth_c_005fforEach_005f2(index_jsp.java:818) ~[na:na] 
at org.apache.jsp.pages.user.index_jsp._jspx_meth_c_005fwhen_005f2(index_jsp.java:782) ~[na:na] 
at org.apache.jsp.pages.user.index_jsp._jspx_meth_c_005fchoose_005f2(index_jsp.java:746) ~[na:na] 
at org.apache.jsp.pages.user.index_jsp._jspService(index_jsp.java:171) ~[na:na] 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) ~[jasper.jar:8.0.15] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) [servlet-api.jar:na] 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) ~[jasper.jar:8.0.15] 
... 49 common frames omitted 

回答

0

你需要有JSP EL表达式干将,它不会承认的公共属性。

更改MovieRecommendation类(也可能是其他人)是这样的:

@QueryResult 
public class MovieRecommendation { 

    Movie movie; 
    int rating; 

    Movie getMovie() { .... } 
    int getRating() {....} 
+0

oh.stupid我。它work.but做你们所知道的,为什么我不能得到movie.title的价值。你可以看到j​​sp中的值我无法获得全部 – yang

+0

你现在是否有不同的异常? –

+0

不,我做了一个jsp problem.i扔cypher得到2推荐是null.do你知道为什么 – yang