NeedsRefresh not working for ModelDrivenInterceptor and Hibernate
-----------------------------------------------------------------
Key: WW-3098
URL: https://issues.apache.org/struts/browse/WW-3098
Project: Struts 2
Issue Type: Bug
Components: Core Interceptors
Affects Versions: 2.1.6
Environment: Hibernate
JPA
Windows XP
Tomcat 6 running under Eclipse 3.4
Java 1.6 with Java 1.5 source compliance
Reporter: Peter Kelley
I have the following configured in struts.xml:
<interceptor-ref name="Driven">
<!-- allow actions to change the model during execution so
that the view gets a new model. -->
<param name="refreshModelBeforeResult">true</param>
</interceptor-ref>
and in my action:
/**
* Create or update the entity.
*
* @return <code>Show</code>
*/
public String save() {
LOG.debug("save() Called");
setEntity(getDao().save(entity));
return SHOW;
}
Where the entity has not previously saved by Hibernate and Hibernate is
returning the entity with the id field set.
When struts gets to the following code in ModelDrivenInterceptor (lines
112-117):
// Check to see if the new model instance is already on the stack
for (Object item : root) {
if (item == newModel) {
needsRefresh = false;
}
}
the test equates to true even though I can see in the debugger that the two
objects have different object identities.
Changing line 114 to:
if (item.equals(newModel)) {
fixes the problem.
I can only think that the cglib enhanced object returned by Hibernate does
something weird with == but responds to .equals() correctly.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.