Esta excepción a mí me ocurrió cuando estaba intentando actualizar un registro de cuyo id no tenemos existencia en la base de datos, porque acababa de ser borrado.
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
Este blog va de pequeñas 'notas' sobre cosas que hago en mi trabajo, desde trozos de código, noticias que me impacten, informática, java, struts, ruby, programación, cmmi, gestión de proyectos.
jueves, 28 de febrero de 2013
lunes, 25 de febrero de 2013
Hacer un redirect con struts
Problema: He creado un post, y el forward me llevó al listado de post, sin embargo, como la url es /crearActionPost.do , si le doy a refrescar me volverá a crear el mismo post. Quiero que me cambie la url, para que aunque refresquen, sea imposible volver a crear el mismo post, que para crear un post, deban iniciar el proceso.
Solución:
Solución:
Esto sería lo que tendría habitualmente: //return mapping.findForward(" mostrarTodo");
Esta, una primera aproximación:
// ActionForward ac = mapping.findForward(" mostrarTodo");
// ac.setRedirect(true);
//return ac;
En realidad ActionForward, hereda de ForwardConfig, entonces, puedo decirle, que quiero que
vaya al listado pero indicándole que haga un redirect:
ForwardConfig f = new ActionRedirect(mapping. findForward("mostrarTodo"));
f.setRedirect(true);
return (ActionForward) f;
html:href .vs. a href
Problema: Queremos llamar desde una jsp a un action de struts.
Posibilidades: Usar una etiqueta "a" de html o usar una etiqueta "Conclusión: Mejor usar la de Struts, puesto que relativiza y puedes llamar a un action sin .do y sin tener en cuenta dónde desde dónde haces la llamada. Peor si quieres imprimir varios parámetros o usar el <bean:write>
OPCIÓN 2:con html:link, no es necesario colocar .do ni las relativas
-->
OPCIÓN 3:con html:link, pasándole un parámetro ID, donde adquiere el valor que tendrá la propiedad id dentro del form llamado post
http://localhost:8080/nombre_proyecto/crearPost.do?method=crear&titulo=4&ID=2
-->
Posibilidades: Usar una etiqueta "a" de html o usar una etiqueta "
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="vo.PostVO" %> <%@page import="java.util.LinkedList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title></title> </head> <body> <logic:iterate name="listaPost" scope="session" id="post" > <bean:write property="titulo" name="post"/> <bean:write property="descripcion" name="post"/> <bean:write property="fecha" name="post"/> <a href="postAction.do?method=detallesPost&id=<bean:write property="id" name="post"/>">Más detalles...</a></br></br> </logic:iterate>
<!-- OPCIÓN 1: con a href, debo buscar la ruta relativa y colocar el .do -->
<a href="../crearPost.do">Crear nuevo Post</a>
<!--
OPCIÓN 2:con html:link, no es necesario colocar .do ni las relativas
-->
<html:link action="crearPost">Crear nuevo Post versión pro</html:link>
<!--
OPCIÓN 3:con html:link, pasándole un parámetro ID, donde adquiere el valor que tendrá la propiedad id dentro del form llamado post
http://localhost:8080/nombre_proyecto/crearPost.do?method=crear&titulo=4&ID=2
-->
<html:link action='crearPost?method=crear&titulo=4' paramName="post" paramProperty="id" paramId="ID" >Crear nuevo Post versión pro</html:link> </body> </html>
Suscribirse a:
Entradas (Atom)