struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jon_Fre...@fws.gov
Subject Re: ModelDriven CRUD validation failure still causes JPA update - RESOLVED
Date Tue, 02 Oct 2007 03:04:08 GMT
OK: I've fixed the problem.

I'm not sure why this was the case, but here is what was causing the 
problem:

In my ModelDriven action, I had a method like this:

    public Collection<ProjectType> getAllProjectTypes(){
        return this.projectTypeDao.getAll();
    }

Notice that instead of returning a simple instance reference, this method 
actually returned the result of a JPA query (via the DAO method call).

This method was used by a struts 2 iterator tag to populate a select list 
on the form and was thus called when my "input" JSP rendered after an 
invalid request. 

I noticed that in the stack trace of my Oracle constraint violation, it 
was actually this query call that was triggering the Session.flush() call 
that was inappropriately saving the invalid entity state to the database. 
By "pre-loading" the collection in the prepare() method like so:

    public void prepare() throws Exception {
       ....
       this.allProjectTypes = this.projectTypeDao.getAll();
    }

    public Collection<ProjectType> getAllProjectTypes(){
        return this.allProjectTypes;
    }

... the problematic flush() goes away.

Beats me why this matters. I'm sure a JPA guru could explain something 
about the Transaction or EntityManager instance being different in the two 
cases, but I don't understand it yet.

Jon French
Programmer
ASRC Management Services
ECOS Development Team
jon_french@fws.gov
970-226-9290

Fort Collins Science Center
US Geological Survey
2150 Centre Ave, Building C
Fort Collins, CO 80526-8116



Jon_French@fws.gov 
10/01/2007 08:29 PM
Please respond to
"Struts Users Mailing List" <user@struts.apache.org>


To
"Struts Users Mailing List" <user@struts.apache.org>
cc

Subject
Re: ModelDriven CRUD validation failure still causes JPA update






Unfortunately, it appears that xworks validation works not on the 
ServletRequest parameters, but on the properties already set on the Action 

- or in my case the model bean. So moving the interceptor up the stack 
would just break validation. 

>From the com.opensymphony.xwork2.validator.ValidationInterceptor javadoc:

 * This interceptor runs the action through the standard validation 
framework, which in turn checks the action against
 * any validation rules (found in files such as 
<i>ActionClass-validation.xml</i>) and adds field-level and action-level
 * error messages (provided that the action implements {@link 
com.opensymphony.xwork2.ValidationAware}). This interceptor
 * is often one of the last (or second to last) interceptors applied in a 
stack, as it assumes that all values have
 * already been set on the action.

Thanks,

Jon French
Programmer
ASRC Management Services
ECOS Development Team
jon_french@fws.gov
970-226-9290

Fort Collins Science Center
US Geological Survey
2150 Centre Ave, Building C
Fort Collins, CO 80526-8116



Dave Newton <newton.dave@yahoo.com> 
10/01/2007 04:42 PM
Please respond to
"Struts Users Mailing List" <user@struts.apache.org>


To
Struts Users Mailing List <user@struts.apache.org>
cc

Subject
Re: ModelDriven CRUD validation failure still causes JPA update






--- Jon_French@fws.gov wrote:
> That's an interesting idea Dave. I'm using the
> paramsPrepareStack. It'll take some investigation to

> see if that would fix the issue.

Shouldn't take much; it might be as simple as adding a
validate/defaultWorkFlow up towards the top (although
I might try just adding new ones rather than removing
the existing ones).

> Fort Collins Science Center
> US Geological Survey
> 2150 Centre Ave, Building C

I used to live up Poudre River Canyon (Poudre Park); I
sure miss the climbing out there :(

d.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org




Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message