Erro de acentuação
26/07/2012 18:25
0
Olá pessoal, só tenho a agradecer a ajuda de todos aqui! Tenho aprendido cada vez mais com vocês. Obrigado.

No momento, estou com um probleminha de acentuação na tela show.gsp. Vou listar o que estou fazendo:

No domain da minha classe coloquei o seguinte atributo:

Nível (inList:["Básico", "Intermediário", "Avançado"])


Mas na exibição da tela show.gsp aparece: "Básico"

Como corrigir isso?

Vlw
Tags: Dúvida, Acentuação, Idioma


0
Olá, Danilo.

Amigo, tenho algo semelhante em um projeto sem problemas.

Veja se seu Config.groovy contém essas linhas:

grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"


Veja também se seus arquivos estão com o encoding UTF-8. Se usar o STS verifique isso nas "properties" do arquivo ou do projeto.

PS: Estou usando Grails 2.0.x


0
Oi Yoshihiro, obrigado pela resposta.

No meu projeto, atualmente coloquei as seguintes linhas:

grails.views.gsp.encoding = "ISO-8859-1"
grails.converters.encoding = "ISO-8859-1"


Com isso, os textos em HTML ficam acentuados corretamente, mas as informações acentuadas que vem do banco de dados não (Percebi esse detalhe agora quando testei).

Caso eu inverta com o código passado por você, tanto os dados do Banco de dados como o da página ficam errados. (estranho...)

Fiz as seguintes alterações para tentar corrigir:

1- No mysql
ALTER TABLE `schema`.`tabela` CHARACTER SET utf8 COLLATE utf8_unicode_ci;


2- Na página index.gsp e main.gsp no <head>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br">


Só não sei ver as propriedades do arquivo. Estou usando o notepad ++


0
Olá, Danilo.

Bem, sempre que uso o Mysql uso o charset "latin1" e não tenho problemas.

Essas propriedades "lang" e "xml:lang" não alteram no conteúdo que eu saiba. Até onde eu sei o que influencia é a tag "<meta>" (ex: <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />).


0
Descobri o que acontecia:

Percebi que somente nos campos com link que o acento ficava errado. O grails por padrão cria o seguinte código para os links:


<span class="property-value">
<g:link>[b]${CAMPOInstance?.CAMPO?.encodeAsHTML()}[/b]</g:link>
</span>


Substituí o código em negrito para o código abaixo:


<g:fieldValue bean="${CAMPOInstance}" field="CAMPO"/>


Obrigado Yoshiriro!


0
Danilo,

acredito que se for apenas para prevenir a "troca" que houve bastaria um

<g:link>${CAMPOInstance?.CAMPO}</g:link>

Lógico que essa solução não previne ataques XSS, caso seja possível de isso ocorrer nessa parte de seu projeto.

Se preferir, pode usar a mesma "tag" "fieldValue" como Expression:
<g:link>${fieldValue(bean: CAMPOInstance, field: 'CAMPO')}</g:link>


Abraços.


0
Yoshiriro,

Por padrão, quando fiz o generate-all do meu domínio, nas views foram adicionadas os códigos <g:fieldValue bean="${CAMPOInstance}" field="CAMPO"/>, por isso as utilizei novamente no lugar dos links.

Depois do seu comentário, percebo que temos várias maneiras de exibir o campo. Qual você recomenda? Esta errado ou inseguro usar o código padrão?

E, o que seria ataque XSS? (A segurança do meu projeto vou verificar depois... estou pegando o jeito ainda em codificar as telas e navegações.)



0
Olá, Danilo.

Amigo, no Grails, assim como em todos os frameworks modernos, temos sempre várias maneiras de fazer a mesma coisa. No final, fica a preferência pessoal quando a segurança e performance forem as mesmas.

Usar o código padrão (ex: ${pessoa?.observacoes}) pode gerar problemas com XSS.


0
Voltando a questão da acentuação, só percebi outro detalhe hoje. Bom, no momento deixei configurado desta maneira:


CONFIG
grails.views.gsp.encoding = "ISO-8859-1"
grails.converters.encoding = "ISO-8859-1"

MYSQL
ALTER TABLE `SCHEMA`.`TABLE` CHARACTER SET latin1 COLLATE latin1_general_cs;

INDEX.GSP E MAIN GSP
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />


Mas percebi que acontece o seguinte: Os dados que são gerados pelo InList do Domain estão acentuando errado no _Form.gsp.

Um exemplo:

DOMAIN
//Falta(blank:false, nullable:false, inList:["Não", "Sim"])

_FORM (GERADO AUTOMATICAMENTE PELO GRAILS)
<g:select name="substituicao" from="${diarioInstance.constraints.substituicao.inList}" required="" value="${diarioInstance?.substituicao}" valueMessagePrefix="diario.substituicao"/>


Ou, como no caso abaixo:

DOMAIN
String toString() {
return "Diário ${dt_aula}"
}


A Palavra "Diário" ou "Não" ficam errados...
O que sugerem?

Obrigado de qualquer maneira.


0
Pessoal, alguém me ajuda na questão acima?

Obrigado.


0
Danilo,

esses dados foram inseridos no banco antes ou depois de sua mudança de mapa de caracteres?



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