null id in X entry (don't flush the Session after an exception occurs).
29/07/2013 14:17
<!-- Multiplos Sites -->
<tr class="fieldcontain ${hasErrors(bean: empresaInstance, field: 'enderecosEletronicos', 'error')}" style="border-width: 1px; border-style: dotted; border-color: #B0E0E6;">
<td class="label">
<label for="enderecosEletronicos">
<g:message code="empresa.editar.endereco.eletronico" default="Sites_" />
<img src="${resource(dir:'images', file:'add.png')}" style="vertical-align:middle;" alt="${message(code: 'empresa.editar.adicionar.endereco.eletronico')}" onclick="addEnderecoEletronico();"/>
</label>
</td>
<td>
<g:render template="enderecosEletronicos" model="['empresaInstance':empresaInstance]" />
</td>
</tr>
<script type="text/javascript">
var childCount = ${empresaInstance?.enderecosEletronicos.size()} + 0;
function addEnderecoEletronico() {
var htmlId = "enderecoEletronico" + childCount;
var deleteIcon = "${resource(dir:'images', file:'icon_delete.png')}";
var templateHtml = "<div id='" + htmlId + "' name='" + htmlId + "'>\n";
templateHtml += "<input type='text' id='enderecosEletronicosList[" + childCount + "].site' name='enderecosEletronicosList[" + childCount + "].site' />\n";
templateHtml += "<span onClick='$(\"#" + htmlId + "\").remove();'><img src='" + deleteIcon + "' /></span>\n";
templateHtml += "</div>\n";
$("#childList").append(templateHtml);
var str = "enderecosEletronicosList["+ childCount +"].site";
document.getElementById(str).focus();
childCount++;
}
</script>
<div id="childList">
<g:each var="enderecoEletronico" in="${empresaInstance?.enderecosEletronicos}" status="i">
<g:render template='enderecoEletronico' model="['enderecoEletronico':enderecoEletronico,'i':i,'hidden':false]"/>
</g:each>
</div>
class EnderecoEletronico implements Serializable {
String site
boolean deleted
static transients = [ 'deleted' ]
static belongsTo = [empresa: Empresa]
static mapping = {
sort site: "asc"
}
static constraints = {
site blank:true, minSize: 4
}
def String toString() {
return site
}
}
List enderecosEletronicos = new ArrayList();
static hasMany = [ enderecosEletronicos: EnderecoEletronico ]
...
static mappedBy = [ enderecosEletronicos: 'empresa']
...
//Multiplos enderecos eletronicos
def getEnderecosEletronicosList() {
return LazyList.decorate( enderecosEletronicos, FactoryUtils.instantiateFactory(EnderecoEletronico.class))
}
...
static mapping = {
enderecosEletronicos cascade: 'all-delete-orphan'
}
...
static constraints = {
enderecosEletronicos nullable: true
}
...
//Multiplos enderecos eletronicos
def getEnderecosEletronicosList() {
return LazyList.decorate( enderecosEletronicos, FactoryUtils.instantiateFactory(EnderecoEletronico.class))
}
//Primeiro remove todos endereços eletrônicos
empresaInstance.executeUpdate('delete from EnderecoEletronico e where e.empresa.id = ?', [empresaInstance.id])
//Depois adiciona todos os elementos que existem no request
params.entrySet().each {
if(it.key.startsWith("enderecosEletronicosList[") && it.key.contains("site")) {
def ee = new EnderecoEletronico();
ee.site = it.value
empresaInstance.addToEnderecosEletronicos(ee)
}
}
Para se registrar, clique aqui.