2014-04-25 2 views
1

J'ai une relation un-à-plusieurs très basique: Post a beaucoup de commentaires. Je voudrais créer/mettre à jour un commentaire de la page Publier (à la Rails RESTful) comme: posts/3/comments/2/edit (pour mettre à jour un commentaire par exemple.) Voici ce que j'ai dans PostsController:Spring MVC - un-à-plusieurs comment obtenir un ID de clé étrangère dans le contrôleur

@Controller 
@RequestMapping("/posts/{post_id}/comments") 
public class CommentsController { 

@Autowired 
    private CommentService commentService; 

    @RequestMapping(value = "/{id}/edit", method = RequestMethod.GET) 
    public String initUpdateForm(@PathVariable Long id, Model model) { 
     Comment comment = commentService.findById(id); 
     return "comments/form"; 
    } 

@RequestMapping(value = "/{id}/edit", method = RequestMethod.PUT) 
    public String processUpdateForm(@Valid Comment comment, BindingResult result, RedirectAttributes redirectAttributes, 
            SessionStatus status) { 

     if (result.hasErrors()) { 
      return "comments/form"; 
     } else { 
      redirectAttributes.addFlashAttribute("message", "Comment updated successfully !"); 
      commentService.save(comment); 
      status.setComplete(); 

      return "redirect:/posts/{post_id}"; 

     } 
    } 

} 

dans la processUpdateForm la valeur de post_di est NULL Comment puis-je obtenir le post_id nécessaire Thnx

Répondre

1

la solution que je trouve est de trouver le poste correspondant par le post_id fourni dans l'url.?

@RequestMapping(value = "/{id}/edit", method = RequestMethod.PUT) 
    public String processUpdateForm(@PathVariable Long post_id, @Valid Comment comment, BindingResult result, RedirectAttributes redirectAttributes, 
            SessionStatus status) { 
     Post post = postService.findById(post_id); 
     comment.setPost(post); 
     if (result.hasErrors()) { 
      return "comments/form"; 
     } else { 
      redirectAttributes.addFlashAttribute("message", "Comment updated successfully !"); 
      commentService.save(comment); 
      status.setComplete(); 

      return "redirect:/posts/{post_id}"; 
     } 
    } 

Peut être qu'il y a une meilleure solution, je ferais soyez reconnaissant d'être partagé ici.

Questions connexes