Yeah, I guess that would work, but seems kludgey. Wouldn't it be easier to just have separate actions for each operation? The struts books that I have read (Struts in Action, Husted and Programming Jakarta Struts, Cavaness) claim that the dispatch action makes the application easier to maintain by grouping related operations together, but it seems that it makes using the validator more difficult. Have others found this to be the case?

Adam Hardy wrote:

Sorry, that's the only property you do NOT want to copy! I mean all the others.

On 03/31/2004 06:44 PM Adam Hardy wrote:

It's worth trying it with a new mapping then. Copy across the relevant bits from the real mapping, in pseudocode:

newMapping = new Mapping();
newMapping.setName(origMapping.getName());
etc.



On 03/31/2004 06:37 PM Takhar, Sandeep wrote:

I thought there used to be a way in the struts-config to say "use this form name even though we are using the same class"

name=""
property=""??

It would still require a different mapping...if it is true


sandeep


-----Original Message-----
From: Paul Barry [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 31, 2004 11:29 AM
To: Struts Users Mailing List
Subject: Re: validator and dispatch action


I get this exception:


javax.servlet.ServletException: Configuration is frozen

Adam Hardy wrote:


I mean, try changing it in the code in your action when you want to validate, & change it back afterwards to its previous value when done. Is that what you tried?

String oldName = mapping.getName();
mapping.setName("widget-edit");
form.validate(mapping, request);
mapping.setName(oldName);



On 03/31/2004 05:52 PM Paul Barry wrote:


The name of the action-mapping has to correspond to the name of the form-bean.

Adam Hardy wrote:


If I really wanted to stick with your set-up, I see a way it might be possible, although I have not done this myself.

Try changing the 'name' attribute of the mapping to the validation that you defined in the validation.xml, e.g. 'widget-update' or 'widget-edit' and then call the validate() method.

My main worry is that ActionMapping may not like being changed, but if so, you could instantiate a new one.

Adam

On 03/31/2004 05:18 PM Paul Barry wrote:


Hello Everyone,

I am using the validator and dispatch actions and I am wonder what the best way to do this is. Consider that I have the following method in a dispatch action:

add - populates collections for drop-down lists, forwards to jsp page
create - needs to do validation and store in database
edit - needs to populate form with the data to edit, forward to jsp page
update - needs to do validation and update database
delete - needs to delete a record from the database


You can see how the validation would be different for these actions. Let's say this is a dispatch action related to administrating users. So for add, there would be no validation, it just gets the data need to build the form. For create, there might be a password and verify password field that need to be validated, but update wouldn't have those fields. Edit and delete would have to have a parameter for the primary key of the record to edit or delete.

Now I found something related at this link:

http://nagoya.apache.org/wiki/apachewiki.cgi?ValidatorDispatchAction

Which says to set validate to false in the struts-config.xml and then call validate method within each method of the dispatch action, like this:

ActionErrors errors = new ActionErrors();
errors = form.validate(mapping, request);

// Report any errors we have discovered back to the original form
if (!errors.isEmpty()) {
   saveErrors(request, errors);
   return  new ActionForward(mapping.getInput());
}

This seems like a really good solution to me, but there is one problem. How do you call a different set of validation rules, based on which method you are in? Doesn't this need to be something like this:

edit() {
   ActionErrors errors = new ActionErrors();
   errors = form.validateEdit(mapping, request);
}

update() {
   ActionErrors errors = new ActionErrors();
   errors = form.validateUpdate(mapping, request);
}

Because the rules for validating edit and update are different. You could define different action-mappings in your struts config for each dispatch method, and then a form in your validation.xml for each action-mapping, where the form name is the same as the path property of the action-mapping, but doesn't this defeat the purpose of the dispatch action? Why not just have separate actions at that point? I think the answer is to just not use the dispatch action with the validator, but I wanted to know if others had found a way to do it.

---------------------------------------------------------------------

To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to