首页 > 代码库 > 利用struts进行前端页面间传值及hibernate异常:a different object with the same identifier value was already associated with the session的总结
利用struts进行前端页面间传值及hibernate异常:a different object with the same identifier value was already associated with the session的总结
2017-3-16
我使用SSH框架在做单表CRUD的更新操作时遇到了一个问题,就是页面间该怎么传值?解决该需求时引发了一系列的bug,趁还记得好好总结一番。
前端页面间传值
情景:在我查出所以记录后,点击修改会链接到新的修改页面。
问题:该新页面没有之前的实体信息,该如何传递要修改的实体信息给该页面,例如id?
思路1:利用struts的action来传值。
1 <form action="deleteSerCate.action" method="post"> 2 <input type="hidden" name="serviceCategory.id" value="<s:property value="http://www.mamicode.com/#list.id"/>"> 3 <input type="submit" value="删除"> 4 <a href="serviceCId.action?serviceCategory.id=<s:property value="http://www.mamicode.com/#list.id"/>">修改</a> 5 </form>
注意看我<a>里的url,我新建了一个action,并在url里传递了id值。接着在新建的action里只做返回"success",如下:
1 // 传id到更新页面 2 public String serviceCId(){ 3 return "success"; 4 }
然后在struts.xml的相应action里返回到更新页面:
1 <!-- 传id到更新页面 --> 2 <action name="serviceCId" class="serCateAction" method="serviceCId"> 3 <result name="success">/updateSerCate.jsp</result> 4 </action>
完成后点击“修改”后跳转到更新页面,此时页面已经可以获得需更新实体的id号了。如下:
思路2:同样在url里传值,在新页面里用js获取值。该思路还没有实施过,但是感觉可行。待检验。
总结:前端页面间传值,前后端传值是常碰到的场景,这里我使用了action来传值是一种方法,应该还有更好的方法,以后若有新经验有待再总结。
hibernate异常:a different object with the same identifier value was already associated with the session
在更新操作中进行session.update(object);时报了上面错误。
原因:在hibernate中同一session里有两个相同标识但是是不同实体的情况,即2个不同的对象关联到了同一个标志位。例如我的情况就是session中有两个对象关联到同一个id,在session进行更新操作时不知道要更新哪一个对象。
解决方法:在update前进行session.clear();操作。如下:
1 /* 2 * 不clear一下会报a different object with the 3 * same identifier value was already 4 * associated with the session 5 */ 6 session.clear(); 7 session.update(serviceCategory);
有时在进行session.clear()操作后会报"Found two representations of same collection"异常,具体原因我也不懂,有待理解与解决。
解决该问题时这篇文章对我帮助最大,留言中也得到很多收获:http://www.blogjava.net/hrcdg/articles/157724.html
利用struts进行前端页面间传值及hibernate异常:a different object with the same identifier value was already associated with the session的总结