NullPointerException no hora de salvar
24/04/2015 13:02
0
Galera, criei minhas classes de controller e as views usando o scaffold.
Eu possuo as seguintes classes:
class Student extends User{
 String obs
 static hasOne = [resp: Resp]
  static constraints = {}
}

class Resp extends User{
 String desc
 static belongsTo = [student: Student]
  static constraints = {}
}


e a classe User

   
class User{
 String username
 String password
 boolean enabled = true
 boolean accountExpired
 boolean accountLocked
 boolean passwordExpired
 
 static constraints = {
username blank: false, unique: true
password blank: false
 }
 
 static mapping = {
password column: '`password`'
tablePerHierarchy false
 }
}


No controller eu possuo o seguinte:
     
import grails.transaction.Transactional

   
class StudentController {
  def create() {
respond new Student(params)
  }
 
  @Transactional
? ? ?def save() {
 
def resp = new Resp()
resp.desc= params.descResp
resp.username = params.username
resp.password = params.password
resp.enabled = true
resp.accountExpired = false
resp.accountLocked = false
resp.passwordExpired = false
 
def studentInstance = new Student()
studentInstance.obs= params.studentObs
studentInstance.username = params.studentUsername
studentInstance.password = params.studentPassword
studentInstance.enabled = true
studentInstance.accountExpired = false
studentInstance.accountLocked = false
studentInstance.passwordExpired = false
studentInstance.resp= resp
 
if (!studentInstance.hasErrors()) {
studentInstance.save(flush:true)
 
}else{
respond studentInstance.errors, view:'create'
return
}
 
request.withFormat {
form multipartForm {
  flash.message = message(code: 'default.created.message', args: [message(code: 'student.label', default: 'Student'), studentInstance.id])
  redirect(controller: "student", action: "index")
}
'*' { respond studentInstance, [status: CREATED] }
}
  }
}


No momento que clico em salvar na minha View Create o objeto é persistido no BD, mas é retornado essa exceção mostrando que é na parte do studentInstance.save(flush:true), fazendo o mesmo processo no BootStrap roda tranquilo.
Tags: NullPointerExceptio, save,


1
Olá,
Para poder lhe ajudar melhor seria interessante ver o detalhamento do erro, porém acho que seria útil testar informar o atributo student no objeto resp antes do if:
resp.student = studentInstance

if (!studentInstance.hasErrors()) {

Outras sugestões:
Você realmente precisa do relacionamento entre as classes Student e Resp indo e voltando?
Caso um Resp possa estar vinculado a mais de um Student como faria?
24/04/2015 20:13


0
Pior que só é mostrado isso Bruno Matheus NullPointException e diz que foi na linha do save(flush:true), como falei, os dados são persistidos no Banco, mas fica lançando essa exceção. Estou achando estranho pq aparentemente está tudo ok e fazendo isso no arquivo BootStrap do grails roda tranquilo sem lançar exceção. Não sei se tem relação com minha view, scaffold, etc.
24/04/2015 22:22


0
Olá,
Para visualizar mais detalhes do erro você pode digitar --stacktrace no console (aí depois coloca aqui para darmos uma olhada)
Com relação a funcionar no BootStrap me deixou curioso o fato de não lançar exceção. O NullPointerException é lançado quando tentamos acessar um atributo ou método de uma variável nula, sendo assim não entendo porque o erro estaria acontecendo na linha do 
studentInstance.save(flush:true)

visto que o método hasErrors() do objeto studentInstance é acessado na linha anterior sem problemas.

Continuo sugerindo que teste a forma que expliquei no comentário anterior (adicionar uma linha antes do save() populando o atributo student do objeto rest) e me fale se deu certo ou não.
25/04/2015 23:24



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto