1

我正在尝试通过他们的 id 检索用户,并在页面上检索分配给他们的模块。我已经映射了模型中的一对多关系。

用户模型

 @Entity
 @Table(name = "user")
 @Component
  public class User implements Serializable
  @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
  private Set<Module> sModule = new HashSet<Module>();

  @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="manager")
  private Set<Module> cModule = new HashSet<Module>(); 

模块型号

  @Entity
  @Table(name = "modules")
  @Component
  public class Module implements Serializable
  @ManyToOne(fetch=FetchType.LAZY) 
  @JoinColumn(name="user_id", insertable=false, updatable=false)
   private User user;

   @ManyToOne(fetch=FetchType.LAZY) 
  @JoinColumn(name="manager_id", insertable=false, updatable=false)
  private User manager; 

它的控制器 -

@RequestMapping(value="/home/user_page/{userId}", method = 

    RequestMethod.GET)  
public String showUserModules(@PathVariable("userId") String userId, ModelMap 

    map, HttpServletRequest request) {
    map.addAttribute("cp", request.getContextPath());
    map.addAttribute("user", userService.getWithModules(userId));

    return "/home/user_page";}

当我尝试打开 user_page 时,它​​返回一个错误,显示:

    The requested resource is not available

那么,当我访问他们的用户页面时,如何获取用户和他们所需的模块。

编辑:堆栈跟踪

   WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP 

  request with URI [/professional/home/user_page] in DispatcherServlet 

  with name 'servlet-context'
4

1 回答 1

0

我认为您的问题是由控制器中两种方法的类似映射引起的。据我了解,其中一种方法具有像“/home/user/setting_page”这样的映射,另一种是“/home/user/{userId}”。这就是为什么在您添加 userId 路径变量后,控制器会尝试将“setting_page”解析为 userId,并且您会收到此错误,因为这样的用户不存在。尝试更改此 URL 之一以使其独一无二。

编辑:

好的。正如我从您的更新中看到的那样,问题的原因是 Spring 尝试查找 url“home/user_page”的映射,但它不能,因为您没有在控制器中使用此类映射的方法。如果您想通过此方法调用显示 JSP(或 html),那么您应该在配置文件中定义 InternalViewResolver 并返回页面名称。这是教程,其中描述了如何使用 InternalViewResolver。

于 2013-05-01T11:01:20.177 回答