Constraint nullable e blank true não funcionando
17/09/2015 00:45
0
Estou usando o Grails 3.0.4 e estou com os seguintes erros:

O campo [relacao] da classe [class sisarb.Requerente] não pode ser vazio
O campo [relacaoOutra] da classe [class sisarb.Requerente] não pode ser vazio


Não entendo pois setei nullable e blank como true nesses atributos:

Classe:

?class Requerente {

String nome
?String proprietario
String relacao
String relacaoOutra

?static constraints = {
? ?proprietario nullable: false, inList: ['S','N']
relacao nullable: true, blank: true, maxSize: 1, inList: ['F','C','P','I','O']
relacaoOutra nullable: true, blank: true, maxSize: 20
?}
}

Formulário:

?<g:form action="save">
<fieldset class="form">
<legend>Dados do Requerente</legend>
<label for="nome">Nome *</label>
<input type="text" name="nome" required id="nome">
<label for="proprietario">Proprietário *</label>
<select name="proprietario" required id="campoProprietario">
<option value="S">Sim</option>
<option value="N">Não</option>
</select>

<label for="relacao">Relação com Proprietário *</label>
<select name="relacao" id="selectRelacao">
<option value="">Selecione</option>
<option value="F">Filho(a)</option>
<option value="C">Cônjuge</option>
<option value="P">Pai/Mãe</option>
<option value="I">Inquilino(a)</option>
<option value="O">Outra</option>
</select>
<input type="text" name="relacaoOutra" id="inputRelacaoOutra" style="display: none"/>
 
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
<script type="text/javascript">
$("#campoProprietario").change(function() {
if($("#campoProprietario").val() == 'N'){
$("#selectRelacao").attr("required","true");
$("#campoRelacao").show();
}else{
$("#selectRelacao").removeAttr("required");
$("#selectRelacao").val("");
$("#campoRelacao").hide();
$("#inputRelacaoOutra").removeAttr("required");
$("#inputRelacaoOutra").val("");
}
});
$("#selectRelacao").change(function() {
if($("#selectRelacao").val() == 'O'){
$("#inputRelacaoOutra").attr("required","true");
$("#inputRelacaoOutra").show();
}else{
$("#inputRelacaoOutra").removeAttr("required");
$("#inputRelacaoOutra").val("");
$("#inputRelacaoOutra").hide();
}
});
</script>
Tags: nullable blank constraint erro


-2
Victor quando vc diz que um campo é nullable:true, vc indica que ele aceita ser nullo, no seu caso vc tem que marcar como falso.
17/09/2015 08:14


0
Colega,
Dando uma rápida pesquisada vi que existem alguns problemas com o inList e o blank/nullable.
Até por que você usa o inList para dizer quais são os valores possíveis certo? como isso pode ser nullo se não tem o valor "nulo" no seu inList?
Uma "solução" pode ser adicionar '' no seu inList  inList: ['','F','C','P','I','O']

Mas em todo caso pode ser um o velho cache! Da um clean, limpa tudo. limpas as pastas de cache do grails. e tenta novamente.


0
Eu uso "nullable:true" e "inList" (sem "") e funciona bem.
Victor, acho que só vc remover o "blank" e o "maxSize" já funciona, pra falar a verdade estas duas constraints não fazem muito sentido quando vc já usou "inList" (pelo menos não consegui ver uma utilidade para isso).
17/09/2015 11:37


0
Galera muito obrigado pelas respostas.

Mas na boa, não sei mais o que fazer. Não vejo sentido em remover o "inList", "blank" e "maxSize", mas deixei as constraints conforme abaixo e NÃO funcionou. Mesmo erro ocorre. E mais bizarro, quando dou drop na tabela, ele cria a tabela com as colulas "Not Null". Também já tentei desativar na mão o "Not Null" do banco e o mesmo erro ocorre. WTF?!?! Será que é bug da versão do Grails?

static constraints = {
?proprietario nullable: false
relacao nullabe: true
relacaoOutra nullabe: true
}?


0
[RESOLVIDO]
Bom, vergonhosamente não reparei que os atributos estavam escrito nullabe (SEM O L). Porém, podem reparar que a primeira postagem estava escrito corretamente. Então minha conclusão foi que estava dando esse erro pois já existiam as colunas no banco como Not Null, e quando atualizei na classe e rodei o projeto, não atualizou a constraint no banco. Depois quando resolvi tentar fazer o drop na tabela, continuou dando o erro pois durante as alterações para testar escrevi nullable errado e o erro continuou o mesmo, dando a impressão de que nada mudou. Depois do drop e o conserto da palavra funcionou! Obrigado ae



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