2013-05-04 71 views
1

我目前在頁面上有一個從數據庫中檢索到的用戶列表。與用戶一起的是關聯的子對象,但我想要做的是在同一頁上而不是所有用戶的列表中,它只是一個當前登錄到應用程序的用戶。所以他們被禁止查看所有用戶的詳細信息,並應該能夠查看他們自己的具體細節和子對象。Spring按ID檢索一個用戶

道 - 爲獲得所有用戶的方法

public List<Module> getSetterModules(Integer userId){ 

     Session session = sessionFactory.getCurrentSession(); 

     Query query = session.createQuery("FROM UserEntity as u WHERE 
       u.userId="+userId); 

     UserEntity userEntity = (UserEntity) query.uniqueResult(); 

     return new ArrayList<Module>(userEntity.getsModule()); 

檢索用戶和相關對象的列表,我想通過自己的ID檢索只有一個用戶(即驗證)的DTO和列出所有鏈接到它們的對象。我試圖實現它是這樣的:

@RequestMapping(value = "/main", method = RequestMethod.GET) 
public String getRecords(@RequestParam("userId") Integer userId, ModelMap 

     model) { 

    //Retrieve one user 
    UserEntity user = userService.getUserByID(userId); 
    UserEntityDTO userDTO = new UserEntityDTO(); 


    UserEntityDTO dto = new UserEntityDTO(); 
    dto.setUserId(user.getUserId()); 
    dto.setsModule(moduleService.getSetterModules(user.getUserId())); 
    dto.setcModule(moduleService.getCheckerModules(user.getUserId())); 

    userDTO.add(dto); 
    } 
    model.addAttribute("user", userDTO); 

     return "/main";} 

我想了解一些如何從這裏繼續或有一個更簡單的方式獲取用戶。

新DAO

@Transactional 
public UserEntity getUserByID(Integer userId) { 
    Session session = sessionFactory.getCurrentSession(); 

    UserEntity userEntity = (UserEntity) session.get(UserEntity.class, userId); 
    userEntity.getsModule(); 

      return userEntity;} 

控制器

@RequestMapping(value = "/main/user/testing", method = RequestMethod.GET) 
    public String getRecords(@RequestParam("userId") Integer userId, ModelMap 

     model) { 
    UserEntity userEntity = userService.getUserByID(userId); 

    model.addAttribute("user", userEntity); 

    return "/main/user/testing"; 
} 

錯誤

 HTTP Status 400 - Required Integer parameter 'userId' is not present 

編輯2:上述實施URL返航上述所以我試圖硬編碼標識加入錯誤網址:

<c:url value="/main/user/testing/?userId=2" var="url"/><a href="<c:out 

    value='${url}'/>">test</a> 

,改變了控制器:

@RequestMapping(value = "/main/user/testing{userId}", method = RequestMethod.GET) 
    public String getRecords(@RequestParam("userId") Integer userId, ModelMap 

     model) { 
    UserEntity userEntity = userService.getUserByID(userId); 

    model.addAttribute("user", userEntity); 

    return "/main/user/testing"; 
} 

但現在的錯誤是:

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 
org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274) 
org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238) 
org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155) 
javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256) 
org.apache.jsp.WEB_002dINF.views.main.user.testing_jsp._jspx_meth_c_005fforEach_005f0(testing_jsp.java:181) 
org.apache.jsp.WEB_002dINF.views.main.user.testing_jsp._jspService(testing_jsp.java:125) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264) 
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

這是我想在jsp:

<table> 
     <tr> 
        <th>User Id</th> 
        <th>Module Code</th> 
        <th>Module Name</th> 
       </tr> 


     <c:forEach items="${setter}" var="obj" > 
     <c:forEach items="${obj.sModule}" var="module" > 


      <tr> 
       <td><c:out value="${obj.userId}" escapeXml="true" /></td> 


       <td><c:out value="${module.moduleCode}" escapeXml="true" /></td> 
       <td><c:out value="${module.moduleName}" escapeXml="true" /></td> 



      </tr> 
      </c:forEach> 
     </c:forEach> 
    </table> 

我真的會喜歡瞭解我如何獲取用戶和相關模塊,而不必將userId硬編碼到網址中。任何幫助都會很棒。

回答

0

結帳的get方法上SessionDocumentation

session.get(UserEntity.class, userId); 
+0

感謝您的。我已經實現了它並使用userId參數爲它編寫了一個cocntroller,但是它返回錯誤 - Required Integer參數'userId'不存在。我已經用它更新了第一篇文章。 – user2259555 2013-05-04 18:46:58

+0

發佈提交請求的表單或ajax – 2013-05-04 19:33:39

+0

我已編輯了第一篇文章。我對我的url請求和控制器做了一些改動,現在它返回一個堆棧跟蹤錯誤。我希望看看它。 – user2259555 2013-05-05 00:01:26