If you put the list in request scope, it disappears when the request is finished. That's why you're probably getting the error: the second request (failed validation) is trying to re-display the collection, but it no longer exists.

You should either (1) put the list in sesssion scope or (2) turn off automatic validation, and put the list back into request scope before calling form.valdiate()

Paul

Prakash Inuganti -X (pinugant - Digital-X, Inc. at Cisco) wrote:
Hi,

I am having an issue with select list and not able to figure out a
resolution. Any help is greatly appreciated. Here is the scenario.

I have 2 action classes. One (Approve.do) for displaying the form with
prepopulated values from database. A second Action(SaveApprove.do) to
take the form values and do validations and then do further business
process. The first action populates all select lists fine. But when I
submit the screen with new values and if any validation fails, it gives
me an error Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot find bean: "agreeStatus" in any
scope
        at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:935)
        at
org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCol
lectionTag.java:173)

Code snapshots are below

ApproveAction class

labelvaluePairs2.add(new LabelValueBean("Select One", "Select One"));
                while(iter.hasNext()){ //this is a result set from
database
                        String val = (String) iter.next();
                        labelvaluePairs2.add(new LabelValueBean(val,
val));
                }
//aForm.setAgreeStatus(labelvaluePairs2); -- this did not help where
aForm is the form instance and agreeStstus is list in Form.
                request.setAttribute("agreeStatus", labelvaluePairs2);
return (mapping.findForward("approve"));

SaveApproveAction class

if (!errors.isEmpty()) {
        return (mapping.getInputForward());
}

//save the form values to database
And I am repeating the labelvaluePairs2 code above.(I started without it
but thought doing this would put it in scope, but it did not help)
return (mapping.findForward("success"));

Struts-config.xml

    <action path="/Approve" name="ApproveForm"
type="approve.ApproveAction" scope="request" validate="false">
        <forward name="approve" path="exs.approve"></forward>
    </action>
    <action path="/SaveApprove" name="ApproveForm"
type="approve.SaveApproveAction" parameter="methodToCall"
scope="request" input="exs.approve">
        <forward name="success" path="exs.success"></forward>
    </action>

Approve.jsp
<bean:define id="appr" name="approveInfo" property="approveDetails"
/>//This is a bean with list of classes
<html:select property="agreementStatus" name="appr">
        
<html:optionsCollection name="agreeStatus" value="value" label="label"/>
                                                </html:select>

For good measure I added this in Action Form with getter and setter
methods
List agreeStatus = null;

public ActionErrors validate(ActionMapping mapping, HttpServletRequest
request) {
                //request.setAttribute("agreeStatus", agreeStatus); --
This did not help
                //return super.validate(mapping, request);
                ActionErrors errors = new ActionErrors();
                return errors;
        }

I have no idea how to redisplay the form when validations fail. Any
advise would be a great help. Thanks in advance.


Thanks
Prakash



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

  • Problem with r... Prakash Inuganti -X \(pinugant - Digital-X, Inc. at Cisco\)
    • Re: Probl... Paul Benedict
    • RE: Probl... Prakash Inuganti -X \(pinugant - Digital-X, Inc. at Cisco\)

Reply via email to