Oi pessoal!
Tenho uma galeria de fotos com 10 fotos, em cada uma existe um checkbox para marcar se é “avatar”, só pode haver uma foto como avatar. Ao subir uma foto marcando um checkbox Avatar a foto é salva no banco com um campo boolean “avatar”. Consigo carregar esse dado da seguinte forma:
<c:forEach var="foto" items="${fotos}">
<c:choose>
<c:when test="${foto.avatar == true}">
<input type="checkbox" name="foto.avatar" id="avatar" checked />Avatar
</c:when>
<c:otherwise>
<input type="checkbox" name="foto.avatar" id="avatar" onclick="setAvatar();">Avatar
</c:otherwise>
</c:choose>
</c:forEach>

O meu problema está sendo em ao clicar numa outra foto, teria que desmarcar o checkbox da anterior e enviar a id da nova foto por parâmetro e assim atualizar o avatar. Fiz o seguinte:
<script>
function setAvatar() {
var boxes = document.getElementByName("foto.avatar");
var foto = document.getElementByName("foto.avatar").value;
for(i=0;i<boxes.length;i++) {
if(boxes[i].checked) {
boxes.checked=false;
new Ajax.Request('atualizaAvatar',{
method: 'post',
parameters: foto,
onComplete: function(){
alert('O avatar foi alterado com sucesso!');
}
}
);
}
}
}
</script>
Pesquisando no Google achei o Prototype: http://www.prototypejs.org/learn/introduction-to-ajax
Estou seguindo o manual dele com outras dicas da internet, mas não está dando certo, ao marcar outra foto a anterior não é desmarcada e tb não passa nada por parâmetro pro Controller:
public void atualizaAvatar(Foto foto) {
fotoDAO.atualiza(foto);
}
Na DAO está:
public void atualiza(Foto foto) {
Transaction tx = session.beginTransaction();
session.update(foto);
tx.commit();
}
Alguém consegue dar alguma dica de como resolver? =)
Abraço!!




