Erro ao tentar deletar registro no Grails 2.5.0
15/10/2015 23:45
1
Ao tentar apagar um registro no Grails 2.5.0, Java 1.7, MySQL 5, spring-security-core:2.0-RC4 dá um erro :

HTTP Status 403 -type Status report
message
description Access to the specified resource has been forbidden.

Já coloquei no controller :

static allowedMethods = [save: "POST", update: "PUT", delete: ["POST", "DELETE"]]
?
na view está assim :
<g:form url="[resource:regraTributalizaInstance, action:'delete']" method="DELETE">  
  <g:actionSubmit value="Delete" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Tem certeza?')}');" />
</g:form>

Este código foi gerado no scaffod, me parece correto, mas não funciona.
Tags: Grails


0
Oi Pedro Henrique!

Alguns browsers não submetem conteúdo como DELETE, tente mudar o atributo method do seu formulário para POST e veja se funciona. 

Você pode verificar como está sendo feita a submissão do conteúdo para o servidor através das ferramentas de desenvolvimento do browser na aba Network.


0
Coloquei, enviou post :
[font=Arial][size=85]Remote Address:
[::1]:9090
Request URL:
http://localhost:9090/frontend/regraTributaliza/delete/3
Request Method:
[/size][/font] ?POST[font=Arial][size=85]
Status Code:
404 Not Found[/size][/font]

Agora evoluí de erro, mas não era pra dar este erro.
16/10/2015 12:34


0
Oi Pedro Henrique,

neste caso o problema agora é outro. Muito provavelmente a action "delete" não existe ou o arquivo GSP relacionado ("delete.gsp"?) não existe, o que aponta este erro do Grails.


0
Posta o código do controller, se possível
Também veja se não há nenhum url mapping afetando isso
E como você alterou o method utilizado pelo form, lembre-se também de alterar o allowedMethods no controller


0
Olha o que eu encontrei na documentação do plugin do sprig-security :

The plugin isn't compatible with Grails 
<g:actionSubmit>
 tags. These are used in the autogenerated GSPs that are created for you, and they enable having multiple submit buttons, each with its own action, inside a single form. The problem from the security perspective is that the form posts to the default action of the controller, and Grails figures out the handler action to use based on the 
action
 attribute of the 
actionSubmit
 tag. So for example you can guard the 
/person/delete
 with a restrictive role, but given this typical edit form:
<g:form> …
<g:actionSubmit class="save" action="update"value='Update' />
<g:actionSubmit class="delete" action="delete"value="'Delete' />
</g:form>

both actions will be allowed if the user has permission to access the 
/person/index
 url, which would often be the case.
The workaround is to create separate forms without using 
actionSubmit
 and explicitly set the 
action
 on the 
<g:form>
 tags, which will result in form submissions to the expected urls and properly guarded urls.
17/10/2015 10:25


0
Este é o código que foi gerado pelo generate-all

static allowedMethods = [save: "POST", update: "PUT", delete: ["POST", "DELETE", "GET"]]

@Transactional
def delete(Long id) {
  def regraTributalizaInstance = RegraTributaliza.get(id)
  if (regraTributalizaInstance == null) {
notFound()
return
  }
  regraTributalizaInstance.delete(flush: true)
  flash.message = message(code: 'default.deleted.message', args: [message(code: 'regraTributaliza.label', default: 'RegraTributaliza'), regraTributalizaInstance.nome])
  redirect action: "index", method: "GET"
}
17/10/2015 10:28


0
Não sabia desta incompatibilidade... bom saber disso
Conseguiu funcionar, então? Pelo jeito é só alterar o formulário


0
Kico, descobri, é só deixar no actionSubmit a property
action="delete"
, sendo assim ficaria no form  ne actionSubmit.

<g:form url="[resource:regraTributalizaInstance, action:'delete']" method="DELETE">  
  <g:actionSubmit value="Delete" action="delete" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Tem certeza?')}');" />
</g:form>
20/10/2015 12:00



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