Я работаю с примером из Grails in Action, в частности, впервые внедряя Сервис и перенося работу с Контроллера на Сервис.
У меня есть объект Post, содержащий контент User и String..
Сервисный код
class PostService {
boolean transactional= true
Post createPost(String user, String content){
def thisUser = User.findByUserID(user)
if (user){
def post = new Post(content:content)
if (user.save()){
return post
} else
throw new PostException(message: "Invalid post", post:post)
}
throw new PostException(message:"Invalid User ID")
}
}
, а код контроллера
def addPost = {
try{
def newPost = postService.createPost(params.id, params.content)
flash.message= "Added new Post: $newPost.content}"
} catch (PostException pe){
flash.message = pe.message
}
redirect(action:'timeline', id:params.id)
}
То, как этот код должен работать, - это ввод в форме, которая передается в addPost
как объект params.Затем указанный объект params передается в Службу, где создается новое сообщение и связывается с ним.
Однако я получаю ошибку в user.save()
.Конкретное сообщение об ошибке:
No signature of method: java.lang.String.save() is applicable for argument
types: () values: []
Если я стираю сервисный разъем и внедряю сервисный код в контроллер как
def user = User.findByUserID(params.id)
if (user) {
def post= new Post(params)
user.addToPosts(post)
if (user.save()){
flash.message= "Sucessfully created Post"
}
else {
user.discard()
flash.message = "Invalid or empty post"
}
} else {
flash.message = "Invalid User ID"
}
redirect(action: 'timeline', id:params.id)
}
, действие работает.Так почему я получаю ошибку user.save()
при реализации службы, а не у контроллера?