You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Raghu Kanchustambham <kr...@gmail.com> on 2005/11/12 18:21:47 UTC

Validator framework hijacks requests! :(

I think I can explain it now.
 I hit the action servlet first invoking preCreate function. This function
populates various lists of beans needed for dropdowns and put these lists in
the request object and forward to a JSP. The JSP reads these lists and
displays the dropdowns. So far so good!
 preCreate --->request object populated with lists ---> JSP reads from
request for dropdown lists
 Now... enter the Validation framework! I think it is hijacking this series!

 preCreate ---> request populated with lists ---> Validator framework --->
JSP
 Now the jump from Validator framework to JSP means that all request scope
objects (the lists) are lost! :(
 How should I architect ? Should I make these lists session scope? I somehow
dont like to make them session scope, because they are really request scope!

 Can someone comment on my explanation / help me with a solution ??
  Thanks much.
Regards,
Raghu


 On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>
> I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> Martin-
> ----- Original Message -----
> From: "Raghu Kanchustambham" <kr...@gmail.com>
> To: "Struts Users Mailing List" <us...@struts.apache.org>
> Sent: Saturday, November 12, 2005 10:37 AM
> Subject: Re: Fw: Validator framework introduces errors
>
>
> Hi Martin,
> I do something like:
> request.setAttribute("centreList",DataAccessManager.getCentres());
> before invoking the jsp.
> The strange part is, the minute i remove validation.xml from the validator
> path, effectively removing the validation framework, every thing works
> just
> fine! Just cant explain it ! :(
> Thanks again in advance to anyone who can explain this!
> Please find the StudentEnquiry.jsp attached.
> ----------------------------------------
>
> <%@ page import="
> com.tuningfork.student.businessobject.enquiry.StudentEducationDetail"%>
> <%@ page language="java" %>
> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>
> <layout:html>
> <head>
> <title>Student Enquiry</title>
>
> <link rel="stylesheet" type="text/css" href="../mystyle.css" />
> <SCRIPT>function set(target) {document.forms
> [0].operation.value=target;}</SCRIPT>
> </head>
> <body>
> <h2>Student Enquiry</h2>
> <html:errors/>
> <c:set var="operationVar">
> <%= request.getParameter("nextOperation")%>
> </c:set>
>
> <c:set var="readOnlyForm"> false </c:set>
>
> <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> doesnt
> have a Next operation -->
> <c:set var="readOnlyForm"> true </c:set>
> </c:if>
> <html:form action="StudentEnquiry.do"
> onsubmit="validateStudentEnquiryForm(this);">
> <input type="hidden" name="operation"
> value="<%=request.getParameter("nextOperation")%>"
> />
> <table width="100%">
> <tr>
> <td rowspan="2">
> <%@include file="StudentDemographics.jsp"%>
> </td>
> <td>
> <layout:grid cols="2">
> <layout:select property="enquiryCentreId" size="${selectBoxSize}"
> key="Enquiry Centre">
> <layout:options collection ="centreList" property="id" labelName="name" />
> </layout:select>
> <layout:select property="enquiryCourseId" size="${selectBoxSize}"
> key="Enquiry Course">
> <layout:optionsCollection name="courseList" value="id" label="name"/>
> </layout:select>
> </layout:grid>
>
> </td>
> </tr>
>
>
> <tr>
> <td>
> </td>
> <td align="center">
> <html:submit>${operationVar} </html:submit>
> <html:cancel>cancel</html:cancel>
> </td>
> </tr>
>
> </table>
>
>
> </html:form>
>
> </body>
> </layout:html>
> ------------------------------------------------
>
>
> On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >
> > I did'nt see the (StudentEnquiry.jsp) jsp page which references
> centreList
> > bean?
> > I also dont see the code for centreList bean?
> >
> > Martin-
> >
> > ----- Original Message -----
> > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > Sent: Saturday, November 12, 2005 9:40 AM
> > Subject: Validator framework introduces errors
> >
> >
> > Hi,
> > The minute I introduced Validator framework in my application .....
> > it started giving me the following error when I accessed the JSP ....
> > centreList is used as a parameter for the dropdown. The minute I remove
> > the
> > validation.xml from the path... the application runs fine again! :(
> > very strange and i am not able to explain this behavior .. can someone
> > help?
> > Thanks much in advance.
> > Regards,
> > Raghu
> >
> > javax.servlet.jsp.JspException: Cannot find bean centreList in any scope
> > org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
> > fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
> > OptionsCollectionTag.java:115)
> >
> >
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> > (StudentEnquiry_jsp.java:1088)
> > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> > (StudentEnquiry_jsp.java:1062)
> > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> > (StudentEnquiry_jsp.java:1028)
> > org.apache.jsp.student.StudentEnquiry_jsp._jspService
> > (StudentEnquiry_jsp.java:258)
> >
> >
> >
> >
> >
> > My validation.xml (very simple one):
> >
> > <!DOCTYPE form-validation PUBLIC
> > "-//Apache Software Foundation//DTD Commons Validator Rules
> > Configuration 1.0//EN"
> > "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> >
> >
> > <form-validation>
> > <formset>
> > <form name="studentEnquiryForm">
> > <field property="studentEnquiry.firstName" depends="required">
> > <arg0 key="firstName.mandatory"/>
> > </field>
> > </form>
> > </formset>
> > </form-validation>
> >
>

Re: Validator framework hijacks requests! :(

Posted by Laurie Harper <la...@holoweb.net>.
Raghu Kanchustambham wrote:
> Thanks Laurie.
> Just curious.. should Struts ideally not "warn" me against this? When I
> define that something needs to be validated and there is no validate method
> or doesnt implement/declare the correct interface or class... it should have
> cribbed and told me so. This reminds me of experiences programming in the
> primitive typeless languages ! I dont know if this is technically
> infeasible.. but if it is not.. then it should warn the developer of such
> errors.

Hmm, I'm not sure what's going on under the covers but it seems like it 
should be possible to detect this... Can you post an enhancement request 
in Bugzilla and I'll take a look at it?

>  A similar error that happened with this validator framework worth recalling
> at this stage is the error in locating validation.xml ... i accidentally
> named my file as validations.xml (plural) and declared it as
> validation.xmlin struts-config. And it took me a lot of effort to spot
> the error. Can this
> not be detected and reported to me by the validator f/w?

It is, at least in Struts 1.2.7; it logs an error and throws an 
exception which aborts startup. If you can reproduce a scenario where an 
invalid config file is skipped without error, please post a bug report 
describing the problem.

>  And I still need a little more help ... please help me validate indexed
> properties. The following isn't working... :(
>  <field property="paymentDetails[0].amount" depends="required"/>
> 
>  The form bean definitions, struts-config.xml have been posted in my last
> mail. I added the above line to the validation.xml posted in my last mail.
> Validations of other fields seem to work (after I followed your
> suggestion).... but I cant get validation of these indexed properties to
> work. Can you comment on what I am doing wrong?

Not sure about this one, I haven't tried setting up validation for 
indexed properties. I've seen this topic come up on the lists a few 
ties, though; try searching the list archives. If that doesn't turn 
anything up, you might want to post a fresh thread for this question.

L.

>  Thanks much.
>  Best Regards,
> Raghu
>   On 11/19/05, Laurie Harper <la...@holoweb.net> wrote:
> 
>>One thing jumps out right off: your form bean is a DynaActionForm. It
>>needs to be an instance of ValidatorActionForm for validation to occur;
>>either DynaValidatorActionForm form or, probably, DynaValidatorForm.
>>
>>If that doesn't work, I'd suggest adding a simple String-type property
>>to the form and see if you can get validation working for that first.
>>I've never used nested business objects in dyna forms like you are.
>>
>>L.
>>
>>Raghu Kanchustambham wrote:
>>
>>>Thanks Laurie for the detailed explanation.
>>>I am still not able to get the validation working .. after spending
>>
>>almost
>>
>>>a frustrating one week on it.
>>>Can you help me by telling me what I am doing wrong here... everything
>>>seems to be right.. just that it isnt working... :(
>>>Bean definition and Action Mapping in struts-config.xml:
>>><form-bean name="studentEnrollmentForm" type="
>>>org.apache.struts.action.DynaActionForm">
>>><form-property name="studentEnrollment" type="
>>>com.tuningfork.student.businessobject.enrollment.StudentEnrollment" />
>>><form-property name="paymentDetails" type="
>>>com.tuningfork.student.businessobject.enrollment.StudentPaymentDetail[]"
>>>size="4"/>
>>></form-bean>
>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>path="/StudentEnrollmentPre" scope="request"
>>>validate="false" type="
>>
>>com.tuningfork.student.action.StudentEnrollmentAction"
>>
>>>parameter="operation">
>>><forward name="preCreateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>><forward name="preUpdateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=update"/>
>>><forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
>>></action>
>>>
>>><!-- for create and view -->
>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>path="/StudentEnrollment" scope="request"
>>>validate="true" type="
>>
>>com.tuningfork.student.action.StudentEnrollmentAction"
>>
>>>parameter="operation"
>>
>>input="/StudentEnrollmentPre.do?operation=preCreate">
>>
>>><forward name="preCreateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>><forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
>>><forward name="createSuccess" path="home"/>
>>></action>
>>>-------------Snippet from validation.xml ------------
>>>
>>><form name="studentEnrollmentForm">
>>><field property="studentEnrollment.studentCode" depends="required">
>>><arg0 key="code needed"/>
>>></field>
>>><field property="studentEnrollment.joinDate" depends="required,date">
>>><var>
>>><var-name>datePattern</var-name>
>>><var-value>dd/MM/yy</var-value>
>>></var>
>>></field>
>>></form>
>>>------------------------------
>>>StudentEnrollment.jsp---------------------------------
>>>
>>><%@ page language="java" %>
>>><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>>
>>>
>>><html>
>>><head>
>>><title>Student Enrollment</title>
>>><link rel="stylesheet" href='/tuningfork/strutsLayoutConfig/default.css'
>>>type="text/css">
>>><script language="Javascript"
>>>src="/tuningfork/strutsLayoutConfig/javascript.js"></script><script>var
>>>imgsrc="/tuningfork/strutsLayoutConfig/images/"; var
>>>scriptsrc="/tuningfork/strutsLayoutConfig/"; var langue="en"; var
>>>contextPath="/tuningfork";</script>
>>><link rel="stylesheet" type="text/css" href="mystyle.css" />
>>><SCRIPT>function set(target) {document.forms
>>>[0].operation.value=target;}</SCRIPT>
>>></head>
>>><body>
>>>
>>><layout:crumbs styleClass="CRUMBS" separator=">">
>>><layout:crumb key="crumbs.student.home" link="/home.jsp"/>
>>><layout:crumb key="crumbs.student.search"
>>>link="/StudentSearch.do?operation=search"/>
>>><layout:crumb key="crumbs.student.enrollment"/>
>>></layout:crumbs>
>>>
>>><html:errors/>
>>>
>>><h2>Student Enrollment</h2>
>>>
>>>
>>><c:set var="operationVar">
>>><%= request.getParameter("nextOperation")%>
>>></c:set>
>>>
>>><c:set var="readOnlyForm"> false </c:set>
>>>
>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
>>
>>doesnt
>>
>>>have a Next operation -->
>>><c:set var="readOnlyForm"> true </c:set>
>>></c:if>
>>>
>>><html:form action="StudentEnrollment.do">
>>><input type="hidden" name="operation" value="${operationVar}" />
>>><layout:grid cols="2">
>>><layout:text property="studentEnrollment.enquiry.id<http://studentEnrollment.enquiry.id>
>>
>><http://studentEnrollment.enquiry.id>"
>>
>>>key="Enquiry Id" size="5" readonly="true"/>
>>><layout:space/>
>>><layout:text property="studentEnrollment.studentCode" key="Student Code"
>>>size="10" isRequired="true"/>
>>><layout:date key="Joining Date" property="studentEnrollment.joinDate"
>>>layout="true" patternKey="dd/MM/yy" startYear="1970" isRequired="true"
>>>maxlength="8" size="8"/>
>>><layout:select property="studentEnrollment.course.id<http://studentEnrollment.course.id>
>>
>><http://studentEnrollment.course.id>"
>>
>>>key="Course">
>>><layout:options collection="courseList" property="id"
>>
>>labelProperty="name"
>>
>>>sourceOf="studentEnrollment.batch.id <http://studentEnrollment.batch.id><
>>
>>http://studentEnrollment.batch.id>"/>
>>
>>></layout:select>
>>><layout:select property="studentEnrollment.batch.id<http://studentEnrollment.batch.id>
>>
>><http://studentEnrollment.batch.id>"
>>
>>>key="Batch">
>>><layout:optionsDependent collection="batches" property="id"
>>>labelProperty="name"
>>>dependsFrom="studentEnrollment.course.id<http://studentEnrollment.course.id>
>>
>><http://studentEnrollment.course.id>
>>
>>>"/>
>>></layout:select>
>>><layout:text property="studentEnrollment.listPrice" key="List Price"
>>>size="6"/>
>>><layout:text property="studentEnrollment.discount" key="Discount"
>>
>>size="6"/>
>>
>>></layout:grid>
>>><br/>
>>><layout:checkbox property="studentEnrollment.declarationFormFlag"
>>>key="Signed Declaration Form?"/>
>>><br/>
>>><layout:checkbox property="studentEnrollment.photographFlag"
>>
>>key="Submitted
>>
>>>Photographs? "/>
>>><br/>
>>><br/>
>>><br/>
>>><%@include file="StudentPaymentDetails.jsp"%>
>>>
>>><c:if test="${(operationVar=='create') || (operationVar=='update')}" >
>>><html:submit styleClass="formButton">${operationVar} </html:submit>
>>></c:if>
>>></html:form>
>>><html:javascript formName="studentEnrollmentForm"/>
>>></body>
>>></html>
>>>--------------------
>>>Note that I start with the StudentEnrollmentPre.do?operation=preCreate
>>
>>(as
>>
>>>Laurie suggested splitting up the actions into ones which require
>>
>>validation
>>
>>>and others which dont).
>>>When I submit press the submit without filling the required form fields
>>>(namely the student code and joining date), I expect the validation
>>
>>should
>>
>>>kick in and be redirected based on the input parameter. But no such
>>
>>behavior
>>
>>>is being observed ! :(
>>>I am really clueless as to what is missing in here. Appologize for
>>
>>posting
>>
>>>so much information here... but this was my last resort!
>>>And what makes things complicated is that another similar set of
>>>form/action/jsp classes seem to work with validation fine. And there
>>
>>seems
>>
>>>to be no major difference in which the action mappings are defined for
>>
>>this
>>
>>>set and the one which isnt working! :( I will post that also if you
>>
>>think it
>>
>>>will help debug the issue.
>>>Thanks again Laurie for the suggestions you have given so far. Even
>>
>>though
>>
>>>this problem persists, it still made me learn quite a bit about the
>>>validator framework. Hopefully you can spot the mistake in this too ! :)
>>>Best Regards,
>>>Raghu
>>>
>>>
>>>On 11/17/05, Laurie Harper <la...@holoweb.net> wrote:
>>>
>>>
>>>>Raghu Kanchustambham wrote:
>>>>
>>>>
>>>>>Thanks Laurie. It works with the way you suggested. But it makes a lot
>>>>
>>>>of
>>>>
>>>>
>>>>>things clumsy..
>>>>>
>>>>>1. I need to have different action class mappings potentially for each
>>>>
>>>>of
>>>>
>>>>
>>>>>the CRUD operations... though all of them use the same dispatch action
>>>>>class.
>>>>
>>>>Well, only for each case you need to apply different validation criteria
>>>>for, but yes, you may need to have more than two mappings, depending on
>>>>your requirements. You might look at wildcard action path mappings to
>>>>help with this:
>>>>
>>>>
>>>>
>>
>>http://struts.apache.org/struts-doc-1.2.7/userGuide/building_controller.html#action_mapping_wildcards
>>
>>>>I haven't really used dispatch actions, so there might be other options
>>>>I don't know about.
>>>>
>>>>
>>>>
>>>>>2. I still havent figured out a way where you need to pass some "state"
>>>>>information as a part of the URL to an action... something like
>>>>>StudentEnquiry.do?studentId=32 .... let us say that is the URL for the
>>>>
>>>>input
>>>>
>>>>
>>>>>parameter of the action mapping.. how do i dynamically get the number
>>>>
>>>>"32"
>>>>
>>>>
>>>>>there.
>>>>
>>>>Not sure I understand what you're asking there but I think the answer is
>>>>that you need to add the parameter in your action before forwarding. If
>>>>the 'state' information is part of the request you're validating and
>>>>validation fails, you don't need to do anything since Struts will
>>>>forward to the input mapping using the same request, which already
>>>>contains your state information.
>>>>
>>>>
>>>>
>>>>>On this piece of actionform things are working.
>>>>>
>>>>>Having said that ..something seems to go wrong with a similar piece of
>>>>>action form.
>>>>>
>>>>>I dont know what I am doing wrong .. can you please tell me what I am
>>>>
>>>>doing
>>>>
>>>>
>>>>>wrong in the following:
>>>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>>>path="/StudentEnrollment" scope="request" validate="true" type="
>>>>>com.tuningfork.student.action.StudentEnrollmentAction"
>>>>
>>>>parameter="operation"
>>>>
>>>>
>>>>>input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
>>>>>StudentEnquiryUpdate.do">
>>>>><forward name="preCreateSuccess"
>>>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>>>><forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
>>>>><forward name="createSuccess" path="home"/>
>>>>></action>
>>>>>
>>>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>>>path="/StudentEnrollmentPre" scope="request"
>>>>>validate="false" type="
>>>>
>>>>com.tuningfork.student.action.StudentEnrollmentAction"
>>>>
>>>>
>>>>>parameter="operation">
>>>>><forward name="preCreateSuccess"
>>>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>>>><forward name="preUpdateSuccess"
>>>>>path="/student/StudentEnrollment.jsp?nextOperation=update"/>
>>>>></action>
>>>>>
>>>>>
>>>>>
>>>>>/StudentEnrollmentPre.do is the operation with validation set to false.
>>>>>
>>>>>My quesiton: Is this good enuf for me to redirect to input parameter on
>>>>>errors ?
>>>>>Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn
>>>>
>>>>on
>>>>
>>>>
>>>>>server side validation?
>>>>
>>>>Yes, that looks right...
>>>>
>>>>
>>>>
>>>>>when javascript validation is enabled through the <html:javascript> ...
>>>>
>>>>it
>>>>
>>>>
>>>>>does client side validation and is able to figure out all the
>>
>>clientside
>>
>>>>>required fields with a "popup".
>>>>>
>>>>>However, I expect it to return back and show the form again from the
>>>>
>>>>server
>>>>
>>>>
>>>>>side if my validation fails. But after the client side validation
>>
>>(which
>>
>>>>it
>>>>
>>>>
>>>>>successfully detects that required fields are missing with a pop-up)..
>>>>
>>>>it
>>>>
>>>>
>>>>>just proceeds as if no errors were there on the page.
>>>>>In a nutshell the input tag is not being used
>>>>>
>>>>>Since javascript side is working fine I think validation.xml has no
>>>>
>>>>errors.
>>>>
>>>>
>>>>>I will post it if you think you need to look at it too.
>>>>
>>>>If client side validation fails the form is never submitted so the
>>>>server isn't involved. You need to enter valid data so client side
>>>>validation succeeds before a request will actually get sent to the
>>
>>server.
>>
>>>>
>>>>>On a side note, I have been chatting with one of the senior users of
>>>>
>>>>struts.
>>>>
>>>>
>>>>>His opinion is that Struts framework creates lot more problems than it
>>>>>solves. What is your opinion on it? Atleast this thing is really taking
>>>>
>>>>a
>>>>
>>>>
>>>>>lot of my effort to get it going... but may be its too early for me to
>>>>>comment on the validator framework as I am new to it.
>>>>
>>>>If you meant to say that 'Struts Validator framework create more
>>>>problems...', I'd say it depends on your perspective. Some love it, some
>>>>hate it. It certainly can be a bit tricky to get to grips with, and it
>>>>only gets you so far; you'll still need to implement some types of
>>>>validation yourself in addition to what validator can do for you.
>>>>
>>>>Personally, I use it for what it *can* do, and fall back to hand-coded
>>>>validation for what it can't. Others perfer to stick to doing everything
>>>>the same way. You'll have to make your own call on whether you want to
>>>>stick with it or not once you've got it working well enough to
>>>>understand the tradeoffs in your application.
>>>>
>>>>L.
>>>>
>>>>
>>>>
>>>>>Thanks in advance.
>>>>>
>>>>>Regards,
>>>>>Raghu
>>>>>
>>>>>
>>>>>On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
>>>>>
>>>>>
>>>>>
>>>>>>The easiest way is probably to split your action mapping out into two
>>>>>>mappings, one for the operations that should have validation applied
>>
>>and
>>
>>>>>>one for the setup operations that shouldn't. Set validate="false" on
>>
>>the
>>
>>>>>>mapping for the setup operations, and make it the input for the other
>>>>>>mapping which will have validate="true".
>>>>>>
>>>>>>L.
>>>>>>
>>>>>>Raghu Kanchustambham wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Thanks Laurie for the suggestion.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>>>>Then set the 'input' attribute for your validating actions to
>>
>>point
>>
>>>>>>to
>>>>>>
>>>>>>
>>>>>>
>>>>>>>the pre-population action >>>> (so when validation fails, Struts
>>>>>>
>>>>>>forwards to
>>>>>>
>>>>>>
>>>>>>
>>>>>>>preCreate, not directly to the JSP).
>>>>>>>That explains why the request variables are getting wiped off! :-) I
>>>>>>>realize I am pointing directly to the JSP page. I changed it now to
>>>>>>
>>>>>>point to
>>>>>>
>>>>>>
>>>>>>
>>>>>>>preCreate.
>>>>>>>However, I have only one action class for all these operations. I
>>
>>just
>>
>>>>>>>have various operations/functions inside that action class to handle
>>>>>>
>>>>>>them. I
>>>>>>
>>>>>>
>>>>>>
>>>>>>>use the dispatch action servlet and not the action servlet and
>>>>>>
>>>>>>preCreate,
>>>>>>
>>>>>>
>>>>>>
>>>>>>>create etc are various parameterized function calls on this dispacth
>>>>>>
>>>>>>action
>>>>>>
>>>>>>
>>>>>>
>>>>>>>class.
>>>>>>>How would you achieve setting false and true on validations based on
>>>>>>
>>>>>>each
>>>>>>
>>>>>>
>>>>>>
>>>>>>>operation in dispatch action?
>>>>>>>I am posting some relevant portions of my struts-config.xml. The
>>
>>minute
>>
>>>>>>I
>>>>>>
>>>>>>
>>>>>>
>>>>>>>changed validate="true", I am getting an exception. And I think I can
>>>>>>>explain it. It is validating before the user inputs anything.
>>
>>Naturally
>>
>>>>>>it
>>>>>>
>>>>>>
>>>>>>
>>>>>>>fails. Then it redirects to the same "input" page. Again fails
>>>>>>
>>>>>>validation...
>>>>>>
>>>>>>
>>>>>>
>>>>>>>its just going into an endless loop. :(
>>>>>>>Please suggest whats the best way to work around this?
>>>>>>>
>>>>>>><form-bean name="studentEnquiryForm" type="
>>>>>>>org.apache.struts.validator.DynaValidatorForm">
>>>>>>><form-property name="studentEnquiry" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
>>>>>>><form-property name="contactAddress" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
>>>>>>><form-property name="permanentAddress" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
>>>>>>><form-property name="educationDetails" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
>>
>>[]"
>>
>>>>>>>size="4"/>
>>>>>>><form-property name="workExperience" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentWorkExperience
>>
>>"/>
>>
>>>>>>><form-property name="enquiryCentreId" type="java.lang.Integer"/>
>>>>>>><form-property name="enquiryCourseId" type=" java.lang.Integer"/>
>>>>>>><form-property name="studentEnquiryId" type="java.lang.Integer"/>
>>>>>>><form-property name="newsPaperIds" type="int[]"/>
>>>>>>><form-property name="discoverySourceIds" type="int[]"/>
>>>>>>><form-property name="centreTimePreferences" type="
>>>>>>>
>>>>>>
>>>>>>
>>com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
>>
>>>>>>[]"
>>>>>>
>>>>>>
>>>>>>
>>>>>>>size="3"/>
>>>>>>>
>>>>>>><form-property name="studentEnquiryFilter" type="
>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
>>>>>>></form-bean>
>>>>>>>
>>>>>>><action attribute="studentEnquiryForm" name="studentEnquiryForm"
>>>>>>>path="/StudentEnquiry" scope="request"
>>>>>>>validate="false" type="
>>>>>>
>>>>>>com.tuningfork.student.action.StudentEnquiryAction"
>>>>>>
>>>>>>
>>>>>>
>>>>>>>parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
>>>>>>><forward name="preCreateSuccess"
>>>>>>>path="/student/StudentEnquiry.jsp?nextOperation=create"/>
>>>>>>><forward name="preUpdateSuccess"
>>>>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>>>>>
>>>>>>><forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
>>>>>>><forward name="createSuccess" path="home"/>
>>>>>>>
>>>>>>><forward name="initFilterForUpdateSuccess"
>>
>>>>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>>>>>><forward name="prepareListForUpdateSuccess"
>>
>>>>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>>>>>><forward name="updateSuccess"
>>>>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>>>>>
>>>>>>></action>
>>>>>>>
>>>>>>>
>>>>>>>On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>The trick is to only include validation on the data processing
>>>>
>>>>actions,
>>>>
>>>>
>>>>>>>>not on the pre-display actions ( i.e. use validate="false" on your
>>>>>>>>preCreate action mapping, and only put validate="true" on the action
>>>>
>>>>you
>>>>
>>>>
>>>>>>>>submit the form to). Then set the 'input' attribute for your
>>>>
>>>>validating
>>>>
>>>>
>>>>>>>>actions to point to the pre-population action (so when validation
>>>>
>>>>fails,
>>>>
>>>>
>>>>>>>>Struts forwards to preCreate, not directly to the JSP).
>>>>>>>>
>>>>>>>>You don't need to use session scope for anything if you don't want
>>
>>to,
>>
>>>>>>>>you just have to make sure that you always display your JSP via your
>>>>>>>>preCreate action.
>>>>>>>>
>>>>>>>>If that doesn't make sense, post your action mappings from
>>>>>>>>struts-config.xml so we can see how you have things setup.
>>>>>>>>
>>>>>>>>L.
>>>>>>>>
>>>>>>>>Raghu Kanchustambham wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>I think I can explain it now.
>>>>>>>>>I hit the action servlet first invoking preCreate function. This
>>>>>>>>
>>>>>>>>function
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>populates various lists of beans needed for dropdowns and put these
>>>>>>>>
>>>>>>>>lists in
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>the request object and forward to a JSP. The JSP reads these lists
>>>>
>>>>and
>>>>
>>>>
>>>>>>>>>displays the dropdowns. So far so good!
>>>>>>>>>preCreate --->request object populated with lists ---> JSP reads
>>
>>from
>>
>>>>>>>>>request for dropdown lists
>>>>>>>>>Now... enter the Validation framework! I think it is hijacking this
>>>>>>>>
>>>>>>>>series!
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>preCreate ---> request populated with lists ---> Validator
>>
>>framework
>>
>>>>>>>>--->
>>>>>>>>
>>>>>>>>>JSP
>>>>>>>>>Now the jump from Validator framework to JSP means that all request
>>>>>>>>
>>>>>>>>scope
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>objects (the lists) are lost! :(
>>>>>>>>>How should I architect ? Should I make these lists session scope? I
>>>>>>>>
>>>>>>>>somehow
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>dont like to make them session scope, because they are really
>>
>>request
>>
>>>>>>>>scope!
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>Can someone comment on my explanation / help me with a solution ??
>>>>>>>>>Thanks much.
>>>>>>>>>Regards,
>>>>>>>>>Raghu
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
>>>>>>>>>>Martin-
>>>>>>>>>>----- Original Message -----
>>>>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>>>>>Sent: Saturday, November 12, 2005 10:37 AM
>>>>>>>>>>Subject: Re: Fw: Validator framework introduces errors
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>Hi Martin,
>>>>>>>>>>I do something like:
>>>>>>>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
>>>>>>>>>>before invoking the jsp.
>>>>>>>>>>The strange part is, the minute i remove validation.xml from the
>>>>>>>>
>>>>>>>>validator
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>>path, effectively removing the validation framework, every thing
>>>>
>>>>works
>>>>
>>>>
>>>>>>>>>>just
>>>>>>>>>>fine! Just cant explain it ! :(
>>>>>>>>>>Thanks again in advance to anyone who can explain this!
>>>>>>>>>>Please find the StudentEnquiry.jsp attached.
>>>>>>>>>>----------------------------------------
>>>>>>>>>>
>>>>>>>>>><%@ page import="
>>>>>>>>>>
>>
>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
>>
>>>>>>"%>
>>>>>>
>>>>>>>>>><%@ page language="java" %>
>>>>>>>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
>>>>>>>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>>>>>>>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>>>>>>>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>>>>>>>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>>>>>>>>>
>>>>>>>>>><layout:html>
>>>>>>>>>><head>
>>>>>>>>>><title>Student Enquiry</title>
>>>>>>>>>>
>>>>>>>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
>>>>>>>>>><SCRIPT>function set(target) { document.forms
>>>>>>>>>>[0].operation.value=target;}</SCRIPT>
>>>>>>>>>></head>
>>>>>>>>>><body>
>>>>>>>>>><h2>Student Enquiry</h2>
>>>>>>>>>><html:errors/>
>>>>>>>>>><c:set var="operationVar">
>>>>>>>>>><%= request.getParameter("nextOperation")%>
>>>>>>>>>></c:set>
>>>>>>>>>>
>>>>>>>>>><c:set var="readOnlyForm"> false </c:set>
>>>>>>>>>>
>>>>>>>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!--
>>>>
>>>>view
>>>>
>>>>
>>>>>>>>>>doesnt
>>>>>>>>>>have a Next operation -->
>>>>>>>>>><c:set var="readOnlyForm"> true </c:set>
>>>>>>>>>></c:if>
>>>>>>>>>><html:form action="StudentEnquiry.do"
>>>>>>>>>>onsubmit="validateStudentEnquiryForm(this);">
>>>>>>>>>><input type="hidden" name="operation"
>>>>>>>>>>value="<%=request.getParameter("nextOperation")%>"
>>>>>>>>>>/>
>>>>>>>>>><table width="100%">
>>>>>>>>>><tr>
>>>>>>>>>><td rowspan="2">
>>>>>>>>>><%@include file="StudentDemographics.jsp"%>
>>>>>>>>>></td>
>>>>>>>>>><td>
>>>>>>>>>><layout:grid cols="2">
>>>>>>>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
>>>>>>>>>>key="Enquiry Centre">
>>>>>>>>>><layout:options collection ="centreList" property="id"
>>>>>>
>>>>>>labelName="name"
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>/>
>>>>>>>>
>>>>>>>>>></layout:select>
>>>>>>>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
>>>>>>>>>>key="Enquiry Course">
>>>>>>>>>><layout:optionsCollection name="courseList" value="id"
>>>>
>>>>label="name"/>
>>>>
>>>>>>>>>></layout:select>
>>>>>>>>>></layout:grid>
>>>>>>>>>>
>>>>>>>>>></td>
>>>>>>>>>></tr>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>><tr>
>>>>>>>>>><td>
>>>>>>>>>></td>
>>>>>>>>>><td align="center">
>>>>>>>>>><html:submit>${operationVar} </html:submit>
>>>>>>>>>><html:cancel>cancel</html:cancel>
>>>>>>>>>></td>
>>>>>>>>>></tr>
>>>>>>>>>>
>>>>>>>>>></table>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>></html:form>
>>>>>>>>>>
>>>>>>>>>></body>
>>>>>>>>>></layout:html>
>>>>>>>>>>------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
>>>>>>>>>>
>>>>>>>>>>centreList
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>bean?
>>>>>>>>>>>I also dont see the code for centreList bean?
>>>>>>>>>>>
>>>>>>>>>>>Martin-
>>>>>>>>>>>
>>>>>>>>>>>----- Original Message -----
>>>>>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>>>>>>Sent: Saturday, November 12, 2005 9:40 AM
>>>>>>>>>>>Subject: Validator framework introduces errors
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>Hi,
>>>>>>>>>>>The minute I introduced Validator framework in my application
>>
>>.....
>>
>>>>>>>>>>>it started giving me the following error when I accessed the JSP
>>>>
>>>>....
>>>>
>>>>
>>>>>>>>>>>centreList is used as a parameter for the dropdown. The minute I
>>>>>>
>>>>>>remove
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>>>the
>>>>>>>>>>>validation.xml from the path... the application runs fine again!
>>
>>:(
>>
>>>>>>>>>>>very strange and i am not able to explain this behavior .. can
>>>>>>
>>>>>>someone
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>>>help?
>>>>>>>>>>>Thanks much in advance.
>>>>>>>>>>>Regards,
>>>>>>>>>>>Raghu
>>>>>>>>>>>
>>>>>>>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in
>>
>>any
>>
>>>>>>>>scope
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
>>>>>>>>>>>
>>>>
>>>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
>>>>
>>>>
>>>>>>(
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>>>OptionsCollectionTag.java:115)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
>>
>>>>>>>>>>>(StudentEnquiry_jsp.java:1088)
>>>>>>>>>>>
>>>>
>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
>>>>
>>>>
>>>>>>>>>>>(StudentEnquiry_jsp.java:1062)
>>>>>>>>>>>
>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
>>
>>>>>>>>>>>(StudentEnquiry_jsp.java:1028)
>>>>>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
>>>>>>>>>>>(StudentEnquiry_jsp.java:258)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>My validation.xml (very simple one):
>>>>>>>>>>>
>>>>>>>>>>><!DOCTYPE form-validation PUBLIC
>>>>>>>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
>>>>>>>>>>>Configuration 1.0//EN"
>>>>>>>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>><form-validation>
>>>>>>>>>>><formset>
>>>>>>>>>>><form name="studentEnquiryForm">
>>>>>>>>>>><field property="studentEnquiry.firstName" depends="required">
>>>>>>>>>>><arg0 key=" firstName.mandatory"/>
>>>>>>>>>>></field>
>>>>>>>>>>></form>
>>>>>>>>>>></formset>
>>>>>>>>>>></form-validation>
>>>>>>>>>>>
>>>>>>>>---------------------------------------------------------------------
>>>>>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>---------------------------------------------------------------------
>>>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 


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


[OT] Re: Validator framework hijacks requests! :(

Posted by Dave Newton <ne...@pingsite.com>.
Raghu Kanchustambham wrote:

>This reminds me of experiences programming in the primitive typeless languages!
>
Primitive like... um... Python? Ruby? Lisp?

>i accidentally
>named my file as validations.xml (plural) and declared it as
>validation.xmlin struts-config. And it took me a lot of effort to spot
>the error. Can this
>not be detected and reported to me by the validator f/w?
>  
>
I would imagine there's something in the log files; what else could it do?

Dave



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


Re: Validator framework hijacks requests! :(

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Thanks Laurie.
Just curious.. should Struts ideally not "warn" me against this? When I
define that something needs to be validated and there is no validate method
or doesnt implement/declare the correct interface or class... it should have
cribbed and told me so. This reminds me of experiences programming in the
primitive typeless languages ! I dont know if this is technically
infeasible.. but if it is not.. then it should warn the developer of such
errors.
 A similar error that happened with this validator framework worth recalling
at this stage is the error in locating validation.xml ... i accidentally
named my file as validations.xml (plural) and declared it as
validation.xmlin struts-config. And it took me a lot of effort to spot
the error. Can this
not be detected and reported to me by the validator f/w?
 And I still need a little more help ... please help me validate indexed
properties. The following isn't working... :(
 <field property="paymentDetails[0].amount" depends="required"/>

 The form bean definitions, struts-config.xml have been posted in my last
mail. I added the above line to the validation.xml posted in my last mail.
Validations of other fields seem to work (after I followed your
suggestion).... but I cant get validation of these indexed properties to
work. Can you comment on what I am doing wrong?
 Thanks much.
 Best Regards,
Raghu
  On 11/19/05, Laurie Harper <la...@holoweb.net> wrote:
>
> One thing jumps out right off: your form bean is a DynaActionForm. It
> needs to be an instance of ValidatorActionForm for validation to occur;
> either DynaValidatorActionForm form or, probably, DynaValidatorForm.
>
> If that doesn't work, I'd suggest adding a simple String-type property
> to the form and see if you can get validation working for that first.
> I've never used nested business objects in dyna forms like you are.
>
> L.
>
> Raghu Kanchustambham wrote:
> > Thanks Laurie for the detailed explanation.
> > I am still not able to get the validation working .. after spending
> almost
> > a frustrating one week on it.
> > Can you help me by telling me what I am doing wrong here... everything
> > seems to be right.. just that it isnt working... :(
> > Bean definition and Action Mapping in struts-config.xml:
> > <form-bean name="studentEnrollmentForm" type="
> > org.apache.struts.action.DynaActionForm">
> > <form-property name="studentEnrollment" type="
> > com.tuningfork.student.businessobject.enrollment.StudentEnrollment" />
> > <form-property name="paymentDetails" type="
> > com.tuningfork.student.businessobject.enrollment.StudentPaymentDetail[]"
> > size="4"/>
> > </form-bean>
> > <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> > path="/StudentEnrollmentPre" scope="request"
> > validate="false" type="
> com.tuningfork.student.action.StudentEnrollmentAction"
> > parameter="operation">
> > <forward name="preCreateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> > <forward name="preUpdateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=update"/>
> > <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> > </action>
> >
> > <!-- for create and view -->
> > <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> > path="/StudentEnrollment" scope="request"
> > validate="true" type="
> com.tuningfork.student.action.StudentEnrollmentAction"
> > parameter="operation"
> input="/StudentEnrollmentPre.do?operation=preCreate">
> > <forward name="preCreateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> > <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> > <forward name="createSuccess" path="home"/>
> > </action>
> > -------------Snippet from validation.xml ------------
> >
> > <form name="studentEnrollmentForm">
> > <field property="studentEnrollment.studentCode" depends="required">
> > <arg0 key="code needed"/>
> > </field>
> > <field property="studentEnrollment.joinDate" depends="required,date">
> > <var>
> > <var-name>datePattern</var-name>
> > <var-value>dd/MM/yy</var-value>
> > </var>
> > </field>
> > </form>
> > ------------------------------
> > StudentEnrollment.jsp---------------------------------
> >
> > <%@ page language="java" %>
> > <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> > <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> > <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> > <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> > <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >
> >
> > <html>
> > <head>
> > <title>Student Enrollment</title>
> > <link rel="stylesheet" href='/tuningfork/strutsLayoutConfig/default.css'
> > type="text/css">
> > <script language="Javascript"
> > src="/tuningfork/strutsLayoutConfig/javascript.js"></script><script>var
> > imgsrc="/tuningfork/strutsLayoutConfig/images/"; var
> > scriptsrc="/tuningfork/strutsLayoutConfig/"; var langue="en"; var
> > contextPath="/tuningfork";</script>
> > <link rel="stylesheet" type="text/css" href="mystyle.css" />
> > <SCRIPT>function set(target) {document.forms
> > [0].operation.value=target;}</SCRIPT>
> > </head>
> > <body>
> >
> > <layout:crumbs styleClass="CRUMBS" separator=">">
> > <layout:crumb key="crumbs.student.home" link="/home.jsp"/>
> > <layout:crumb key="crumbs.student.search"
> > link="/StudentSearch.do?operation=search"/>
> > <layout:crumb key="crumbs.student.enrollment"/>
> > </layout:crumbs>
> >
> > <html:errors/>
> >
> > <h2>Student Enrollment</h2>
> >
> >
> > <c:set var="operationVar">
> > <%= request.getParameter("nextOperation")%>
> > </c:set>
> >
> > <c:set var="readOnlyForm"> false </c:set>
> >
> > <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> doesnt
> > have a Next operation -->
> > <c:set var="readOnlyForm"> true </c:set>
> > </c:if>
> >
> > <html:form action="StudentEnrollment.do">
> > <input type="hidden" name="operation" value="${operationVar}" />
> > <layout:grid cols="2">
> > <layout:text property="studentEnrollment.enquiry.id<http://studentEnrollment.enquiry.id>
> <http://studentEnrollment.enquiry.id>"
> > key="Enquiry Id" size="5" readonly="true"/>
> > <layout:space/>
> > <layout:text property="studentEnrollment.studentCode" key="Student Code"
> > size="10" isRequired="true"/>
> > <layout:date key="Joining Date" property="studentEnrollment.joinDate"
> > layout="true" patternKey="dd/MM/yy" startYear="1970" isRequired="true"
> > maxlength="8" size="8"/>
> > <layout:select property="studentEnrollment.course.id<http://studentEnrollment.course.id>
> <http://studentEnrollment.course.id>"
> > key="Course">
> > <layout:options collection="courseList" property="id"
> labelProperty="name"
> > sourceOf="studentEnrollment.batch.id <http://studentEnrollment.batch.id><
> http://studentEnrollment.batch.id>"/>
> > </layout:select>
> > <layout:select property="studentEnrollment.batch.id<http://studentEnrollment.batch.id>
> <http://studentEnrollment.batch.id>"
> > key="Batch">
> > <layout:optionsDependent collection="batches" property="id"
> > labelProperty="name"
> > dependsFrom="studentEnrollment.course.id<http://studentEnrollment.course.id>
> <http://studentEnrollment.course.id>
> > "/>
> > </layout:select>
> > <layout:text property="studentEnrollment.listPrice" key="List Price"
> > size="6"/>
> > <layout:text property="studentEnrollment.discount" key="Discount"
> size="6"/>
> > </layout:grid>
> > <br/>
> > <layout:checkbox property="studentEnrollment.declarationFormFlag"
> > key="Signed Declaration Form?"/>
> > <br/>
> > <layout:checkbox property="studentEnrollment.photographFlag"
> key="Submitted
> > Photographs? "/>
> > <br/>
> > <br/>
> > <br/>
> > <%@include file="StudentPaymentDetails.jsp"%>
> >
> > <c:if test="${(operationVar=='create') || (operationVar=='update')}" >
> > <html:submit styleClass="formButton">${operationVar} </html:submit>
> > </c:if>
> > </html:form>
> > <html:javascript formName="studentEnrollmentForm"/>
> > </body>
> > </html>
> > --------------------
> > Note that I start with the StudentEnrollmentPre.do?operation=preCreate
> (as
> > Laurie suggested splitting up the actions into ones which require
> validation
> > and others which dont).
> > When I submit press the submit without filling the required form fields
> > (namely the student code and joining date), I expect the validation
> should
> > kick in and be redirected based on the input parameter. But no such
> behavior
> > is being observed ! :(
> > I am really clueless as to what is missing in here. Appologize for
> posting
> > so much information here... but this was my last resort!
> > And what makes things complicated is that another similar set of
> > form/action/jsp classes seem to work with validation fine. And there
> seems
> > to be no major difference in which the action mappings are defined for
> this
> > set and the one which isnt working! :( I will post that also if you
> think it
> > will help debug the issue.
> > Thanks again Laurie for the suggestions you have given so far. Even
> though
> > this problem persists, it still made me learn quite a bit about the
> > validator framework. Hopefully you can spot the mistake in this too ! :)
> > Best Regards,
> > Raghu
> >
> >
> > On 11/17/05, Laurie Harper <la...@holoweb.net> wrote:
> >
> >>Raghu Kanchustambham wrote:
> >>
> >>>Thanks Laurie. It works with the way you suggested. But it makes a lot
> >>
> >>of
> >>
> >>>things clumsy..
> >>>
> >>>1. I need to have different action class mappings potentially for each
> >>
> >>of
> >>
> >>>the CRUD operations... though all of them use the same dispatch action
> >>>class.
> >>
> >>Well, only for each case you need to apply different validation criteria
> >>for, but yes, you may need to have more than two mappings, depending on
> >>your requirements. You might look at wildcard action path mappings to
> >>help with this:
> >>
> >>
> >>
> http://struts.apache.org/struts-doc-1.2.7/userGuide/building_controller.html#action_mapping_wildcards
> >>
> >>I haven't really used dispatch actions, so there might be other options
> >>I don't know about.
> >>
> >>
> >>>2. I still havent figured out a way where you need to pass some "state"
> >>>information as a part of the URL to an action... something like
> >>>StudentEnquiry.do?studentId=32 .... let us say that is the URL for the
> >>
> >>input
> >>
> >>>parameter of the action mapping.. how do i dynamically get the number
> >>
> >>"32"
> >>
> >>>there.
> >>
> >>Not sure I understand what you're asking there but I think the answer is
> >>that you need to add the parameter in your action before forwarding. If
> >>the 'state' information is part of the request you're validating and
> >>validation fails, you don't need to do anything since Struts will
> >>forward to the input mapping using the same request, which already
> >>contains your state information.
> >>
> >>
> >>>On this piece of actionform things are working.
> >>>
> >>>Having said that ..something seems to go wrong with a similar piece of
> >>>action form.
> >>>
> >>>I dont know what I am doing wrong .. can you please tell me what I am
> >>
> >>doing
> >>
> >>>wrong in the following:
> >>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> >>>path="/StudentEnrollment" scope="request" validate="true" type="
> >>>com.tuningfork.student.action.StudentEnrollmentAction"
> >>
> >>parameter="operation"
> >>
> >>>input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
> >>>StudentEnquiryUpdate.do">
> >>><forward name="preCreateSuccess"
> >>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> >>><forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> >>><forward name="createSuccess" path="home"/>
> >>></action>
> >>>
> >>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> >>>path="/StudentEnrollmentPre" scope="request"
> >>>validate="false" type="
> >>
> >>com.tuningfork.student.action.StudentEnrollmentAction"
> >>
> >>>parameter="operation">
> >>><forward name="preCreateSuccess"
> >>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> >>><forward name="preUpdateSuccess"
> >>>path="/student/StudentEnrollment.jsp?nextOperation=update"/>
> >>></action>
> >>>
> >>>
> >>>
> >>>/StudentEnrollmentPre.do is the operation with validation set to false.
> >>>
> >>>My quesiton: Is this good enuf for me to redirect to input parameter on
> >>>errors ?
> >>>Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn
> >>
> >>on
> >>
> >>>server side validation?
> >>
> >>Yes, that looks right...
> >>
> >>
> >>>when javascript validation is enabled through the <html:javascript> ...
> >>
> >>it
> >>
> >>>does client side validation and is able to figure out all the
> clientside
> >>>required fields with a "popup".
> >>>
> >>>However, I expect it to return back and show the form again from the
> >>
> >>server
> >>
> >>>side if my validation fails. But after the client side validation
> (which
> >>
> >>it
> >>
> >>>successfully detects that required fields are missing with a pop-up)..
> >>
> >>it
> >>
> >>>just proceeds as if no errors were there on the page.
> >>>In a nutshell the input tag is not being used
> >>>
> >>>Since javascript side is working fine I think validation.xml has no
> >>
> >>errors.
> >>
> >>>I will post it if you think you need to look at it too.
> >>
> >>If client side validation fails the form is never submitted so the
> >>server isn't involved. You need to enter valid data so client side
> >>validation succeeds before a request will actually get sent to the
> server.
> >>
> >>
> >>>On a side note, I have been chatting with one of the senior users of
> >>
> >>struts.
> >>
> >>>His opinion is that Struts framework creates lot more problems than it
> >>>solves. What is your opinion on it? Atleast this thing is really taking
> >>
> >>a
> >>
> >>>lot of my effort to get it going... but may be its too early for me to
> >>>comment on the validator framework as I am new to it.
> >>
> >>If you meant to say that 'Struts Validator framework create more
> >>problems...', I'd say it depends on your perspective. Some love it, some
> >>hate it. It certainly can be a bit tricky to get to grips with, and it
> >>only gets you so far; you'll still need to implement some types of
> >>validation yourself in addition to what validator can do for you.
> >>
> >>Personally, I use it for what it *can* do, and fall back to hand-coded
> >>validation for what it can't. Others perfer to stick to doing everything
> >>the same way. You'll have to make your own call on whether you want to
> >>stick with it or not once you've got it working well enough to
> >>understand the tradeoffs in your application.
> >>
> >>L.
> >>
> >>
> >>>Thanks in advance.
> >>>
> >>>Regards,
> >>>Raghu
> >>>
> >>>
> >>>On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
> >>>
> >>>
> >>>>The easiest way is probably to split your action mapping out into two
> >>>>mappings, one for the operations that should have validation applied
> and
> >>>>one for the setup operations that shouldn't. Set validate="false" on
> the
> >>>>mapping for the setup operations, and make it the input for the other
> >>>>mapping which will have validate="true".
> >>>>
> >>>>L.
> >>>>
> >>>>Raghu Kanchustambham wrote:
> >>>>
> >>>>
> >>>>>Thanks Laurie for the suggestion.
> >>>>>
> >>>>>
> >>>>>>>>>Then set the 'input' attribute for your validating actions to
> point
> >>>>
> >>>>to
> >>>>
> >>>>
> >>>>>the pre-population action >>>> (so when validation fails, Struts
> >>>>
> >>>>forwards to
> >>>>
> >>>>
> >>>>>preCreate, not directly to the JSP).
> >>>>>That explains why the request variables are getting wiped off! :-) I
> >>>>>realize I am pointing directly to the JSP page. I changed it now to
> >>>>
> >>>>point to
> >>>>
> >>>>
> >>>>>preCreate.
> >>>>>However, I have only one action class for all these operations. I
> just
> >>>>>have various operations/functions inside that action class to handle
> >>>>
> >>>>them. I
> >>>>
> >>>>
> >>>>>use the dispatch action servlet and not the action servlet and
> >>>>
> >>>>preCreate,
> >>>>
> >>>>
> >>>>>create etc are various parameterized function calls on this dispacth
> >>>>
> >>>>action
> >>>>
> >>>>
> >>>>>class.
> >>>>>How would you achieve setting false and true on validations based on
> >>>>
> >>>>each
> >>>>
> >>>>
> >>>>>operation in dispatch action?
> >>>>>I am posting some relevant portions of my struts-config.xml. The
> minute
> >>>>
> >>>>I
> >>>>
> >>>>
> >>>>>changed validate="true", I am getting an exception. And I think I can
> >>>>>explain it. It is validating before the user inputs anything.
> Naturally
> >>>>
> >>>>it
> >>>>
> >>>>
> >>>>>fails. Then it redirects to the same "input" page. Again fails
> >>>>
> >>>>validation...
> >>>>
> >>>>
> >>>>>its just going into an endless loop. :(
> >>>>>Please suggest whats the best way to work around this?
> >>>>>
> >>>>><form-bean name="studentEnquiryForm" type="
> >>>>>org.apache.struts.validator.DynaValidatorForm">
> >>>>><form-property name="studentEnquiry" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
> >>>>><form-property name="contactAddress" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
> >>>>><form-property name="permanentAddress" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
> >>>>><form-property name="educationDetails" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> []"
> >>>>>size="4"/>
> >>>>><form-property name="workExperience" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentWorkExperience
> "/>
> >>>>><form-property name="enquiryCentreId" type="java.lang.Integer"/>
> >>>>><form-property name="enquiryCourseId" type=" java.lang.Integer"/>
> >>>>><form-property name="studentEnquiryId" type="java.lang.Integer"/>
> >>>>><form-property name="newsPaperIds" type="int[]"/>
> >>>>><form-property name="discoverySourceIds" type="int[]"/>
> >>>>><form-property name="centreTimePreferences" type="
> >>>>>
> >>>>
> >>>>
> >>
> com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
> >>
> >>>>[]"
> >>>>
> >>>>
> >>>>>size="3"/>
> >>>>>
> >>>>><form-property name="studentEnquiryFilter" type="
> >>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
> >>>>></form-bean>
> >>>>>
> >>>>><action attribute="studentEnquiryForm" name="studentEnquiryForm"
> >>>>>path="/StudentEnquiry" scope="request"
> >>>>>validate="false" type="
> >>>>
> >>>>com.tuningfork.student.action.StudentEnquiryAction"
> >>>>
> >>>>
> >>>>>parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
> >>>>><forward name="preCreateSuccess"
> >>>>>path="/student/StudentEnquiry.jsp?nextOperation=create"/>
> >>>>><forward name="preUpdateSuccess"
> >>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >>>>>
> >>>>><forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
> >>>>><forward name="createSuccess" path="home"/>
> >>>>>
> >>>>><forward name="initFilterForUpdateSuccess"
>
> >>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> >>>>><forward name="prepareListForUpdateSuccess"
>
> >>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> >>>>><forward name="updateSuccess"
> >>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >>>>>
> >>>>></action>
> >>>>>
> >>>>>
> >>>>>On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>>The trick is to only include validation on the data processing
> >>
> >>actions,
> >>
> >>>>>>not on the pre-display actions ( i.e. use validate="false" on your
> >>>>>>preCreate action mapping, and only put validate="true" on the action
> >>
> >>you
> >>
> >>>>>>submit the form to). Then set the 'input' attribute for your
> >>
> >>validating
> >>
> >>>>>>actions to point to the pre-population action (so when validation
> >>
> >>fails,
> >>
> >>>>>>Struts forwards to preCreate, not directly to the JSP).
> >>>>>>
> >>>>>>You don't need to use session scope for anything if you don't want
> to,
> >>>>>>you just have to make sure that you always display your JSP via your
> >>>>>>preCreate action.
> >>>>>>
> >>>>>>If that doesn't make sense, post your action mappings from
> >>>>>>struts-config.xml so we can see how you have things setup.
> >>>>>>
> >>>>>>L.
> >>>>>>
> >>>>>>Raghu Kanchustambham wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>I think I can explain it now.
> >>>>>>>I hit the action servlet first invoking preCreate function. This
> >>>>>>
> >>>>>>function
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>populates various lists of beans needed for dropdowns and put these
> >>>>>>
> >>>>>>lists in
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>the request object and forward to a JSP. The JSP reads these lists
> >>
> >>and
> >>
> >>>>>>>displays the dropdowns. So far so good!
> >>>>>>>preCreate --->request object populated with lists ---> JSP reads
> from
> >>>>>>>request for dropdown lists
> >>>>>>>Now... enter the Validation framework! I think it is hijacking this
> >>>>>>
> >>>>>>series!
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>preCreate ---> request populated with lists ---> Validator
> framework
> >>>>>>
> >>>>>>--->
> >>>>>>
> >>>>>>>JSP
> >>>>>>>Now the jump from Validator framework to JSP means that all request
> >>>>>>
> >>>>>>scope
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>objects (the lists) are lost! :(
> >>>>>>>How should I architect ? Should I make these lists session scope? I
> >>>>>>
> >>>>>>somehow
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>dont like to make them session scope, because they are really
> request
> >>>>>>
> >>>>>>scope!
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>Can someone comment on my explanation / help me with a solution ??
> >>>>>>>Thanks much.
> >>>>>>>Regards,
> >>>>>>>Raghu
> >>>>>>>
> >>>>>>>
> >>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> >>>>>>>>Martin-
> >>>>>>>>----- Original Message -----
> >>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>>>>>Sent: Saturday, November 12, 2005 10:37 AM
> >>>>>>>>Subject: Re: Fw: Validator framework introduces errors
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>Hi Martin,
> >>>>>>>>I do something like:
> >>>>>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
> >>>>>>>>before invoking the jsp.
> >>>>>>>>The strange part is, the minute i remove validation.xml from the
> >>>>>>
> >>>>>>validator
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>>path, effectively removing the validation framework, every thing
> >>
> >>works
> >>
> >>>>>>>>just
> >>>>>>>>fine! Just cant explain it ! :(
> >>>>>>>>Thanks again in advance to anyone who can explain this!
> >>>>>>>>Please find the StudentEnquiry.jsp attached.
> >>>>>>>>----------------------------------------
> >>>>>>>>
> >>>>>>>><%@ page import="
> >>>>>>>>
> com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> >>>>
> >>>>"%>
> >>>>
> >>>>>>>><%@ page language="java" %>
> >>>>>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
> >>>>>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> >>>>>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> >>>>>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> >>>>>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >>>>>>>>
> >>>>>>>><layout:html>
> >>>>>>>><head>
> >>>>>>>><title>Student Enquiry</title>
> >>>>>>>>
> >>>>>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
> >>>>>>>><SCRIPT>function set(target) { document.forms
> >>>>>>>>[0].operation.value=target;}</SCRIPT>
> >>>>>>>></head>
> >>>>>>>><body>
> >>>>>>>><h2>Student Enquiry</h2>
> >>>>>>>><html:errors/>
> >>>>>>>><c:set var="operationVar">
> >>>>>>>><%= request.getParameter("nextOperation")%>
> >>>>>>>></c:set>
> >>>>>>>>
> >>>>>>>><c:set var="readOnlyForm"> false </c:set>
> >>>>>>>>
> >>>>>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!--
> >>
> >>view
> >>
> >>>>>>>>doesnt
> >>>>>>>>have a Next operation -->
> >>>>>>>><c:set var="readOnlyForm"> true </c:set>
> >>>>>>>></c:if>
> >>>>>>>><html:form action="StudentEnquiry.do"
> >>>>>>>>onsubmit="validateStudentEnquiryForm(this);">
> >>>>>>>><input type="hidden" name="operation"
> >>>>>>>>value="<%=request.getParameter("nextOperation")%>"
> >>>>>>>>/>
> >>>>>>>><table width="100%">
> >>>>>>>><tr>
> >>>>>>>><td rowspan="2">
> >>>>>>>><%@include file="StudentDemographics.jsp"%>
> >>>>>>>></td>
> >>>>>>>><td>
> >>>>>>>><layout:grid cols="2">
> >>>>>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
> >>>>>>>>key="Enquiry Centre">
> >>>>>>>><layout:options collection ="centreList" property="id"
> >>>>
> >>>>labelName="name"
> >>>>
> >>>>
> >>>>>>/>
> >>>>>>
> >>>>>>>></layout:select>
> >>>>>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
> >>>>>>>>key="Enquiry Course">
> >>>>>>>><layout:optionsCollection name="courseList" value="id"
> >>
> >>label="name"/>
> >>
> >>>>>>>></layout:select>
> >>>>>>>></layout:grid>
> >>>>>>>>
> >>>>>>>></td>
> >>>>>>>></tr>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>><tr>
> >>>>>>>><td>
> >>>>>>>></td>
> >>>>>>>><td align="center">
> >>>>>>>><html:submit>${operationVar} </html:submit>
> >>>>>>>><html:cancel>cancel</html:cancel>
> >>>>>>>></td>
> >>>>>>>></tr>
> >>>>>>>>
> >>>>>>>></table>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>></html:form>
> >>>>>>>>
> >>>>>>>></body>
> >>>>>>>></layout:html>
> >>>>>>>>------------------------------------------------
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
> >>>>>>>>
> >>>>>>>>centreList
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>bean?
> >>>>>>>>>I also dont see the code for centreList bean?
> >>>>>>>>>
> >>>>>>>>>Martin-
> >>>>>>>>>
> >>>>>>>>>----- Original Message -----
> >>>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>>>>>>Sent: Saturday, November 12, 2005 9:40 AM
> >>>>>>>>>Subject: Validator framework introduces errors
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>Hi,
> >>>>>>>>>The minute I introduced Validator framework in my application
> .....
> >>>>>>>>>it started giving me the following error when I accessed the JSP
> >>
> >>....
> >>
> >>>>>>>>>centreList is used as a parameter for the dropdown. The minute I
> >>>>
> >>>>remove
> >>>>
> >>>>
> >>>>>>>>>the
> >>>>>>>>>validation.xml from the path... the application runs fine again!
> :(
> >>>>>>>>>very strange and i am not able to explain this behavior .. can
> >>>>
> >>>>someone
> >>>>
> >>>>
> >>>>>>>>>help?
> >>>>>>>>>Thanks much in advance.
> >>>>>>>>>Regards,
> >>>>>>>>>Raghu
> >>>>>>>>>
> >>>>>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in
> any
> >>>>>>
> >>>>>>scope
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
> >>>>>>>>>
> >>
> >>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
> >>
> >>>>(
> >>>>
> >>>>
> >>>>>>>>>OptionsCollectionTag.java:115)
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> >>
> >>>>>>>>>(StudentEnquiry_jsp.java:1088)
> >>>>>>>>>
> >>
> >>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> >>
> >>>>>>>>>(StudentEnquiry_jsp.java:1062)
> >>>>>>>>>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> >>>>>>>>>(StudentEnquiry_jsp.java:1028)
> >>>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
> >>>>>>>>>(StudentEnquiry_jsp.java:258)
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>My validation.xml (very simple one):
> >>>>>>>>>
> >>>>>>>>><!DOCTYPE form-validation PUBLIC
> >>>>>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
> >>>>>>>>>Configuration 1.0//EN"
> >>>>>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>><form-validation>
> >>>>>>>>><formset>
> >>>>>>>>><form name="studentEnquiryForm">
> >>>>>>>>><field property="studentEnquiry.firstName" depends="required">
> >>>>>>>>><arg0 key=" firstName.mandatory"/>
> >>>>>>>>></field>
> >>>>>>>>></form>
> >>>>>>>>></formset>
> >>>>>>>>></form-validation>
> >>>>>>>>>
>
> >>>>>>---------------------------------------------------------------------
> >>>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>>>>>For additional commands, e-mail: user-help@struts.apache.org
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>---------------------------------------------------------------------
> >>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>>>For additional commands, e-mail: user-help@struts.apache.org
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Validator framework hijacks requests! :(

Posted by Laurie Harper <la...@holoweb.net>.
One thing jumps out right off: your form bean is a DynaActionForm. It 
needs to be an instance of ValidatorActionForm for validation to occur; 
either DynaValidatorActionForm form or, probably, DynaValidatorForm.

If that doesn't work, I'd suggest adding a simple String-type property 
to the form and see if you can get validation working for that first. 
I've never used nested business objects in dyna forms like you are.

L.

Raghu Kanchustambham wrote:
> Thanks Laurie for the detailed explanation.
>  I am still not able to get the validation working .. after spending almost
> a frustrating one week on it.
>  Can you help me by telling me what I am doing wrong here... everything
> seems to be right.. just that it isnt working... :(
>  Bean definition and Action Mapping in struts-config.xml:
>  <form-bean name="studentEnrollmentForm" type="
> org.apache.struts.action.DynaActionForm">
> <form-property name="studentEnrollment" type="
> com.tuningfork.student.businessobject.enrollment.StudentEnrollment" />
> <form-property name="paymentDetails" type="
> com.tuningfork.student.businessobject.enrollment.StudentPaymentDetail[]"
> size="4"/>
> </form-bean>
>   <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> path="/StudentEnrollmentPre" scope="request"
> validate="false" type="com.tuningfork.student.action.StudentEnrollmentAction"
> parameter="operation">
> <forward name="preCreateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> <forward name="preUpdateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=update"/>
> <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> </action>
> 
> <!-- for create and view -->
> <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> path="/StudentEnrollment" scope="request"
> validate="true" type="com.tuningfork.student.action.StudentEnrollmentAction"
> parameter="operation" input="/StudentEnrollmentPre.do?operation=preCreate">
> <forward name="preCreateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> <forward name="createSuccess" path="home"/>
> </action>
>  -------------Snippet from validation.xml ------------
> 
> <form name="studentEnrollmentForm">
> <field property="studentEnrollment.studentCode" depends="required">
> <arg0 key="code needed"/>
> </field>
> <field property="studentEnrollment.joinDate" depends="required,date">
> <var>
> <var-name>datePattern</var-name>
> <var-value>dd/MM/yy</var-value>
> </var>
> </field>
> </form>
>   ------------------------------
> StudentEnrollment.jsp---------------------------------
> 
> <%@ page language="java" %>
> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> 
> 
> <html>
> <head>
> <title>Student Enrollment</title>
> <link rel="stylesheet" href='/tuningfork/strutsLayoutConfig/default.css'
> type="text/css">
> <script language="Javascript"
> src="/tuningfork/strutsLayoutConfig/javascript.js"></script><script>var
> imgsrc="/tuningfork/strutsLayoutConfig/images/"; var
> scriptsrc="/tuningfork/strutsLayoutConfig/"; var langue="en"; var
> contextPath="/tuningfork";</script>
> <link rel="stylesheet" type="text/css" href="mystyle.css" />
> <SCRIPT>function set(target) {document.forms
> [0].operation.value=target;}</SCRIPT>
> </head>
> <body>
> 
> <layout:crumbs styleClass="CRUMBS" separator=">">
> <layout:crumb key="crumbs.student.home" link="/home.jsp"/>
> <layout:crumb key="crumbs.student.search"
> link="/StudentSearch.do?operation=search"/>
> <layout:crumb key="crumbs.student.enrollment"/>
> </layout:crumbs>
> 
> <html:errors/>
> 
> <h2>Student Enrollment</h2>
> 
> 
> <c:set var="operationVar">
> <%= request.getParameter("nextOperation")%>
> </c:set>
> 
> <c:set var="readOnlyForm"> false </c:set>
> 
> <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view doesnt
> have a Next operation -->
> <c:set var="readOnlyForm"> true </c:set>
> </c:if>
> 
>  <html:form action="StudentEnrollment.do">
> <input type="hidden" name="operation" value="${operationVar}" />
> <layout:grid cols="2">
> <layout:text property="studentEnrollment.enquiry.id<http://studentEnrollment.enquiry.id>"
> key="Enquiry Id" size="5" readonly="true"/>
> <layout:space/>
> <layout:text property="studentEnrollment.studentCode" key="Student Code"
> size="10" isRequired="true"/>
> <layout:date key="Joining Date" property="studentEnrollment.joinDate"
> layout="true" patternKey="dd/MM/yy" startYear="1970" isRequired="true"
> maxlength="8" size="8"/>
> <layout:select property="studentEnrollment.course.id<http://studentEnrollment.course.id>"
> key="Course">
> <layout:options collection="courseList" property="id" labelProperty="name"
> sourceOf="studentEnrollment.batch.id <http://studentEnrollment.batch.id>"/>
> </layout:select>
> <layout:select property="studentEnrollment.batch.id<http://studentEnrollment.batch.id>"
> key="Batch">
> <layout:optionsDependent collection="batches" property="id"
> labelProperty="name"
> dependsFrom="studentEnrollment.course.id<http://studentEnrollment.course.id>
> "/>
> </layout:select>
> <layout:text property="studentEnrollment.listPrice" key="List Price"
> size="6"/>
> <layout:text property="studentEnrollment.discount" key="Discount" size="6"/>
> </layout:grid>
> <br/>
> <layout:checkbox property="studentEnrollment.declarationFormFlag"
> key="Signed Declaration Form?"/>
> <br/>
> <layout:checkbox property="studentEnrollment.photographFlag" key="Submitted
> Photographs? "/>
> <br/>
> <br/>
> <br/>
> <%@include file="StudentPaymentDetails.jsp"%>
> 
> <c:if test="${(operationVar=='create') || (operationVar=='update')}" >
> <html:submit styleClass="formButton">${operationVar} </html:submit>
> </c:if>
> </html:form>
> <html:javascript formName="studentEnrollmentForm"/>
> </body>
> </html>
>  --------------------
>  Note that I start with the StudentEnrollmentPre.do?operation=preCreate (as
> Laurie suggested splitting up the actions into ones which require validation
> and others which dont).
>  When I submit press the submit without filling the required form fields
> (namely the student code and joining date), I expect the validation should
> kick in and be redirected based on the input parameter. But no such behavior
> is being observed ! :(
>  I am really clueless as to what is missing in here. Appologize for posting
> so much information here... but this was my last resort!
>  And what makes things complicated is that another similar set of
> form/action/jsp classes seem to work with validation fine. And there seems
> to be no major difference in which the action mappings are defined for this
> set and the one which isnt working! :( I will post that also if you think it
> will help debug the issue.
>  Thanks again Laurie for the suggestions you have given so far. Even though
> this problem persists, it still made me learn quite a bit about the
> validator framework. Hopefully you can spot the mistake in this too ! :)
>  Best Regards,
> Raghu
> 
> 
>  On 11/17/05, Laurie Harper <la...@holoweb.net> wrote:
> 
>>Raghu Kanchustambham wrote:
>>
>>>Thanks Laurie. It works with the way you suggested. But it makes a lot
>>
>>of
>>
>>>things clumsy..
>>>
>>>1. I need to have different action class mappings potentially for each
>>
>>of
>>
>>>the CRUD operations... though all of them use the same dispatch action
>>>class.
>>
>>Well, only for each case you need to apply different validation criteria
>>for, but yes, you may need to have more than two mappings, depending on
>>your requirements. You might look at wildcard action path mappings to
>>help with this:
>>
>>
>>http://struts.apache.org/struts-doc-1.2.7/userGuide/building_controller.html#action_mapping_wildcards
>>
>>I haven't really used dispatch actions, so there might be other options
>>I don't know about.
>>
>>
>>>2. I still havent figured out a way where you need to pass some "state"
>>>information as a part of the URL to an action... something like
>>>StudentEnquiry.do?studentId=32 .... let us say that is the URL for the
>>
>>input
>>
>>>parameter of the action mapping.. how do i dynamically get the number
>>
>>"32"
>>
>>>there.
>>
>>Not sure I understand what you're asking there but I think the answer is
>>that you need to add the parameter in your action before forwarding. If
>>the 'state' information is part of the request you're validating and
>>validation fails, you don't need to do anything since Struts will
>>forward to the input mapping using the same request, which already
>>contains your state information.
>>
>>
>>>On this piece of actionform things are working.
>>>
>>>Having said that ..something seems to go wrong with a similar piece of
>>>action form.
>>>
>>>I dont know what I am doing wrong .. can you please tell me what I am
>>
>>doing
>>
>>>wrong in the following:
>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>path="/StudentEnrollment" scope="request" validate="true" type="
>>>com.tuningfork.student.action.StudentEnrollmentAction"
>>
>>parameter="operation"
>>
>>>input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
>>>StudentEnquiryUpdate.do">
>>><forward name="preCreateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>><forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
>>><forward name="createSuccess" path="home"/>
>>></action>
>>>
>>><action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
>>>path="/StudentEnrollmentPre" scope="request"
>>>validate="false" type="
>>
>>com.tuningfork.student.action.StudentEnrollmentAction"
>>
>>>parameter="operation">
>>><forward name="preCreateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=create"/>
>>><forward name="preUpdateSuccess"
>>>path="/student/StudentEnrollment.jsp?nextOperation=update"/>
>>></action>
>>>
>>>
>>>
>>>/StudentEnrollmentPre.do is the operation with validation set to false.
>>>
>>>My quesiton: Is this good enuf for me to redirect to input parameter on
>>>errors ?
>>>Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn
>>
>>on
>>
>>>server side validation?
>>
>>Yes, that looks right...
>>
>>
>>>when javascript validation is enabled through the <html:javascript> ...
>>
>>it
>>
>>>does client side validation and is able to figure out all the clientside
>>>required fields with a "popup".
>>>
>>>However, I expect it to return back and show the form again from the
>>
>>server
>>
>>>side if my validation fails. But after the client side validation (which
>>
>>it
>>
>>>successfully detects that required fields are missing with a pop-up)..
>>
>>it
>>
>>>just proceeds as if no errors were there on the page.
>>>In a nutshell the input tag is not being used
>>>
>>>Since javascript side is working fine I think validation.xml has no
>>
>>errors.
>>
>>>I will post it if you think you need to look at it too.
>>
>>If client side validation fails the form is never submitted so the
>>server isn't involved. You need to enter valid data so client side
>>validation succeeds before a request will actually get sent to the server.
>>
>>
>>>On a side note, I have been chatting with one of the senior users of
>>
>>struts.
>>
>>>His opinion is that Struts framework creates lot more problems than it
>>>solves. What is your opinion on it? Atleast this thing is really taking
>>
>>a
>>
>>>lot of my effort to get it going... but may be its too early for me to
>>>comment on the validator framework as I am new to it.
>>
>>If you meant to say that 'Struts Validator framework create more
>>problems...', I'd say it depends on your perspective. Some love it, some
>>hate it. It certainly can be a bit tricky to get to grips with, and it
>>only gets you so far; you'll still need to implement some types of
>>validation yourself in addition to what validator can do for you.
>>
>>Personally, I use it for what it *can* do, and fall back to hand-coded
>>validation for what it can't. Others perfer to stick to doing everything
>>the same way. You'll have to make your own call on whether you want to
>>stick with it or not once you've got it working well enough to
>>understand the tradeoffs in your application.
>>
>>L.
>>
>>
>>>Thanks in advance.
>>>
>>>Regards,
>>>Raghu
>>>
>>>
>>>On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
>>>
>>>
>>>>The easiest way is probably to split your action mapping out into two
>>>>mappings, one for the operations that should have validation applied and
>>>>one for the setup operations that shouldn't. Set validate="false" on the
>>>>mapping for the setup operations, and make it the input for the other
>>>>mapping which will have validate="true".
>>>>
>>>>L.
>>>>
>>>>Raghu Kanchustambham wrote:
>>>>
>>>>
>>>>>Thanks Laurie for the suggestion.
>>>>>
>>>>>
>>>>>>>>>Then set the 'input' attribute for your validating actions to point
>>>>
>>>>to
>>>>
>>>>
>>>>>the pre-population action >>>> (so when validation fails, Struts
>>>>
>>>>forwards to
>>>>
>>>>
>>>>>preCreate, not directly to the JSP).
>>>>>That explains why the request variables are getting wiped off! :-) I
>>>>>realize I am pointing directly to the JSP page. I changed it now to
>>>>
>>>>point to
>>>>
>>>>
>>>>>preCreate.
>>>>>However, I have only one action class for all these operations. I just
>>>>>have various operations/functions inside that action class to handle
>>>>
>>>>them. I
>>>>
>>>>
>>>>>use the dispatch action servlet and not the action servlet and
>>>>
>>>>preCreate,
>>>>
>>>>
>>>>>create etc are various parameterized function calls on this dispacth
>>>>
>>>>action
>>>>
>>>>
>>>>>class.
>>>>>How would you achieve setting false and true on validations based on
>>>>
>>>>each
>>>>
>>>>
>>>>>operation in dispatch action?
>>>>>I am posting some relevant portions of my struts-config.xml. The minute
>>>>
>>>>I
>>>>
>>>>
>>>>>changed validate="true", I am getting an exception. And I think I can
>>>>>explain it. It is validating before the user inputs anything. Naturally
>>>>
>>>>it
>>>>
>>>>
>>>>>fails. Then it redirects to the same "input" page. Again fails
>>>>
>>>>validation...
>>>>
>>>>
>>>>>its just going into an endless loop. :(
>>>>>Please suggest whats the best way to work around this?
>>>>>
>>>>><form-bean name="studentEnquiryForm" type="
>>>>>org.apache.struts.validator.DynaValidatorForm">
>>>>><form-property name="studentEnquiry" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
>>>>><form-property name="contactAddress" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
>>>>><form-property name="permanentAddress" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
>>>>><form-property name="educationDetails" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
>>>>>size="4"/>
>>>>><form-property name="workExperience" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
>>>>><form-property name="enquiryCentreId" type="java.lang.Integer"/>
>>>>><form-property name="enquiryCourseId" type=" java.lang.Integer"/>
>>>>><form-property name="studentEnquiryId" type="java.lang.Integer"/>
>>>>><form-property name="newsPaperIds" type="int[]"/>
>>>>><form-property name="discoverySourceIds" type="int[]"/>
>>>>><form-property name="centreTimePreferences" type="
>>>>>
>>>>
>>>>
>>com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
>>
>>>>[]"
>>>>
>>>>
>>>>>size="3"/>
>>>>>
>>>>><form-property name="studentEnquiryFilter" type="
>>>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
>>>>></form-bean>
>>>>>
>>>>><action attribute="studentEnquiryForm" name="studentEnquiryForm"
>>>>>path="/StudentEnquiry" scope="request"
>>>>>validate="false" type="
>>>>
>>>>com.tuningfork.student.action.StudentEnquiryAction"
>>>>
>>>>
>>>>>parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
>>>>><forward name="preCreateSuccess"
>>>>>path="/student/StudentEnquiry.jsp?nextOperation=create"/>
>>>>><forward name="preUpdateSuccess"
>>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>>>
>>>>><forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
>>>>><forward name="createSuccess" path="home"/>
>>>>>
>>>>><forward name="initFilterForUpdateSuccess"
>>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>>>><forward name="prepareListForUpdateSuccess"
>>>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>>>><forward name="updateSuccess"
>>>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>>>
>>>>></action>
>>>>>
>>>>>
>>>>>On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
>>>>>
>>>>>
>>>>>
>>>>>>The trick is to only include validation on the data processing
>>
>>actions,
>>
>>>>>>not on the pre-display actions ( i.e. use validate="false" on your
>>>>>>preCreate action mapping, and only put validate="true" on the action
>>
>>you
>>
>>>>>>submit the form to). Then set the 'input' attribute for your
>>
>>validating
>>
>>>>>>actions to point to the pre-population action (so when validation
>>
>>fails,
>>
>>>>>>Struts forwards to preCreate, not directly to the JSP).
>>>>>>
>>>>>>You don't need to use session scope for anything if you don't want to,
>>>>>>you just have to make sure that you always display your JSP via your
>>>>>>preCreate action.
>>>>>>
>>>>>>If that doesn't make sense, post your action mappings from
>>>>>>struts-config.xml so we can see how you have things setup.
>>>>>>
>>>>>>L.
>>>>>>
>>>>>>Raghu Kanchustambham wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>I think I can explain it now.
>>>>>>>I hit the action servlet first invoking preCreate function. This
>>>>>>
>>>>>>function
>>>>>>
>>>>>>
>>>>>>
>>>>>>>populates various lists of beans needed for dropdowns and put these
>>>>>>
>>>>>>lists in
>>>>>>
>>>>>>
>>>>>>
>>>>>>>the request object and forward to a JSP. The JSP reads these lists
>>
>>and
>>
>>>>>>>displays the dropdowns. So far so good!
>>>>>>>preCreate --->request object populated with lists ---> JSP reads from
>>>>>>>request for dropdown lists
>>>>>>>Now... enter the Validation framework! I think it is hijacking this
>>>>>>
>>>>>>series!
>>>>>>
>>>>>>
>>>>>>
>>>>>>>preCreate ---> request populated with lists ---> Validator framework
>>>>>>
>>>>>>--->
>>>>>>
>>>>>>>JSP
>>>>>>>Now the jump from Validator framework to JSP means that all request
>>>>>>
>>>>>>scope
>>>>>>
>>>>>>
>>>>>>
>>>>>>>objects (the lists) are lost! :(
>>>>>>>How should I architect ? Should I make these lists session scope? I
>>>>>>
>>>>>>somehow
>>>>>>
>>>>>>
>>>>>>
>>>>>>>dont like to make them session scope, because they are really request
>>>>>>
>>>>>>scope!
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Can someone comment on my explanation / help me with a solution ??
>>>>>>>Thanks much.
>>>>>>>Regards,
>>>>>>>Raghu
>>>>>>>
>>>>>>>
>>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
>>>>>>>>Martin-
>>>>>>>>----- Original Message -----
>>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>>>Sent: Saturday, November 12, 2005 10:37 AM
>>>>>>>>Subject: Re: Fw: Validator framework introduces errors
>>>>>>>>
>>>>>>>>
>>>>>>>>Hi Martin,
>>>>>>>>I do something like:
>>>>>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
>>>>>>>>before invoking the jsp.
>>>>>>>>The strange part is, the minute i remove validation.xml from the
>>>>>>
>>>>>>validator
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>path, effectively removing the validation framework, every thing
>>
>>works
>>
>>>>>>>>just
>>>>>>>>fine! Just cant explain it ! :(
>>>>>>>>Thanks again in advance to anyone who can explain this!
>>>>>>>>Please find the StudentEnquiry.jsp attached.
>>>>>>>>----------------------------------------
>>>>>>>>
>>>>>>>><%@ page import="
>>>>>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
>>>>
>>>>"%>
>>>>
>>>>>>>><%@ page language="java" %>
>>>>>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
>>>>>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>>>>>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>>>>>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>>>>>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>>>>>>>
>>>>>>>><layout:html>
>>>>>>>><head>
>>>>>>>><title>Student Enquiry</title>
>>>>>>>>
>>>>>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
>>>>>>>><SCRIPT>function set(target) { document.forms
>>>>>>>>[0].operation.value=target;}</SCRIPT>
>>>>>>>></head>
>>>>>>>><body>
>>>>>>>><h2>Student Enquiry</h2>
>>>>>>>><html:errors/>
>>>>>>>><c:set var="operationVar">
>>>>>>>><%= request.getParameter("nextOperation")%>
>>>>>>>></c:set>
>>>>>>>>
>>>>>>>><c:set var="readOnlyForm"> false </c:set>
>>>>>>>>
>>>>>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!--
>>
>>view
>>
>>>>>>>>doesnt
>>>>>>>>have a Next operation -->
>>>>>>>><c:set var="readOnlyForm"> true </c:set>
>>>>>>>></c:if>
>>>>>>>><html:form action="StudentEnquiry.do"
>>>>>>>>onsubmit="validateStudentEnquiryForm(this);">
>>>>>>>><input type="hidden" name="operation"
>>>>>>>>value="<%=request.getParameter("nextOperation")%>"
>>>>>>>>/>
>>>>>>>><table width="100%">
>>>>>>>><tr>
>>>>>>>><td rowspan="2">
>>>>>>>><%@include file="StudentDemographics.jsp"%>
>>>>>>>></td>
>>>>>>>><td>
>>>>>>>><layout:grid cols="2">
>>>>>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
>>>>>>>>key="Enquiry Centre">
>>>>>>>><layout:options collection ="centreList" property="id"
>>>>
>>>>labelName="name"
>>>>
>>>>
>>>>>>/>
>>>>>>
>>>>>>>></layout:select>
>>>>>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
>>>>>>>>key="Enquiry Course">
>>>>>>>><layout:optionsCollection name="courseList" value="id"
>>
>>label="name"/>
>>
>>>>>>>></layout:select>
>>>>>>>></layout:grid>
>>>>>>>>
>>>>>>>></td>
>>>>>>>></tr>
>>>>>>>>
>>>>>>>>
>>>>>>>><tr>
>>>>>>>><td>
>>>>>>>></td>
>>>>>>>><td align="center">
>>>>>>>><html:submit>${operationVar} </html:submit>
>>>>>>>><html:cancel>cancel</html:cancel>
>>>>>>>></td>
>>>>>>>></tr>
>>>>>>>>
>>>>>>>></table>
>>>>>>>>
>>>>>>>>
>>>>>>>></html:form>
>>>>>>>>
>>>>>>>></body>
>>>>>>>></layout:html>
>>>>>>>>------------------------------------------------
>>>>>>>>
>>>>>>>>
>>>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
>>>>>>>>
>>>>>>>>centreList
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>bean?
>>>>>>>>>I also dont see the code for centreList bean?
>>>>>>>>>
>>>>>>>>>Martin-
>>>>>>>>>
>>>>>>>>>----- Original Message -----
>>>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>>>>Sent: Saturday, November 12, 2005 9:40 AM
>>>>>>>>>Subject: Validator framework introduces errors
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>Hi,
>>>>>>>>>The minute I introduced Validator framework in my application .....
>>>>>>>>>it started giving me the following error when I accessed the JSP
>>
>>....
>>
>>>>>>>>>centreList is used as a parameter for the dropdown. The minute I
>>>>
>>>>remove
>>>>
>>>>
>>>>>>>>>the
>>>>>>>>>validation.xml from the path... the application runs fine again! :(
>>>>>>>>>very strange and i am not able to explain this behavior .. can
>>>>
>>>>someone
>>>>
>>>>
>>>>>>>>>help?
>>>>>>>>>Thanks much in advance.
>>>>>>>>>Regards,
>>>>>>>>>Raghu
>>>>>>>>>
>>>>>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
>>>>>>
>>>>>>scope
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
>>>>>>>>>
>>
>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
>>
>>>>(
>>>>
>>>>
>>>>>>>>>OptionsCollectionTag.java:115)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
>>
>>>>>>>>>(StudentEnquiry_jsp.java:1088)
>>>>>>>>>
>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
>>
>>>>>>>>>(StudentEnquiry_jsp.java:1062)
>>>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
>>>>>>>>>(StudentEnquiry_jsp.java:1028)
>>>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
>>>>>>>>>(StudentEnquiry_jsp.java:258)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>My validation.xml (very simple one):
>>>>>>>>>
>>>>>>>>><!DOCTYPE form-validation PUBLIC
>>>>>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
>>>>>>>>>Configuration 1.0//EN"
>>>>>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
>>>>>>>>>
>>>>>>>>>
>>>>>>>>><form-validation>
>>>>>>>>><formset>
>>>>>>>>><form name="studentEnquiryForm">
>>>>>>>>><field property="studentEnquiry.firstName" depends="required">
>>>>>>>>><arg0 key=" firstName.mandatory"/>
>>>>>>>>></field>
>>>>>>>>></form>
>>>>>>>>></formset>
>>>>>>>>></form-validation>
>>>>>>>>>
>>>>>>---------------------------------------------------------------------
>>>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 


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


Re: Validator framework hijacks requests! :(

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Thanks Laurie for the detailed explanation.
 I am still not able to get the validation working .. after spending almost
a frustrating one week on it.
 Can you help me by telling me what I am doing wrong here... everything
seems to be right.. just that it isnt working... :(
 Bean definition and Action Mapping in struts-config.xml:
 <form-bean name="studentEnrollmentForm" type="
org.apache.struts.action.DynaActionForm">
<form-property name="studentEnrollment" type="
com.tuningfork.student.businessobject.enrollment.StudentEnrollment" />
<form-property name="paymentDetails" type="
com.tuningfork.student.businessobject.enrollment.StudentPaymentDetail[]"
size="4"/>
</form-bean>
  <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
path="/StudentEnrollmentPre" scope="request"
validate="false" type="com.tuningfork.student.action.StudentEnrollmentAction"
parameter="operation">
<forward name="preCreateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=create"/>
<forward name="preUpdateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=update"/>
<forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
</action>

<!-- for create and view -->
<action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
path="/StudentEnrollment" scope="request"
validate="true" type="com.tuningfork.student.action.StudentEnrollmentAction"
parameter="operation" input="/StudentEnrollmentPre.do?operation=preCreate">
<forward name="preCreateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=create"/>
<forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
<forward name="createSuccess" path="home"/>
</action>
 -------------Snippet from validation.xml ------------

<form name="studentEnrollmentForm">
<field property="studentEnrollment.studentCode" depends="required">
<arg0 key="code needed"/>
</field>
<field property="studentEnrollment.joinDate" depends="required,date">
<var>
<var-name>datePattern</var-name>
<var-value>dd/MM/yy</var-value>
</var>
</field>
</form>
  ------------------------------
StudentEnrollment.jsp---------------------------------

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>


<html>
<head>
<title>Student Enrollment</title>
<link rel="stylesheet" href='/tuningfork/strutsLayoutConfig/default.css'
type="text/css">
<script language="Javascript"
src="/tuningfork/strutsLayoutConfig/javascript.js"></script><script>var
imgsrc="/tuningfork/strutsLayoutConfig/images/"; var
scriptsrc="/tuningfork/strutsLayoutConfig/"; var langue="en"; var
contextPath="/tuningfork";</script>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
<SCRIPT>function set(target) {document.forms
[0].operation.value=target;}</SCRIPT>
</head>
<body>

<layout:crumbs styleClass="CRUMBS" separator=">">
<layout:crumb key="crumbs.student.home" link="/home.jsp"/>
<layout:crumb key="crumbs.student.search"
link="/StudentSearch.do?operation=search"/>
<layout:crumb key="crumbs.student.enrollment"/>
</layout:crumbs>

<html:errors/>

<h2>Student Enrollment</h2>


<c:set var="operationVar">
<%= request.getParameter("nextOperation")%>
</c:set>

<c:set var="readOnlyForm"> false </c:set>

<c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view doesnt
have a Next operation -->
<c:set var="readOnlyForm"> true </c:set>
</c:if>

 <html:form action="StudentEnrollment.do">
<input type="hidden" name="operation" value="${operationVar}" />
<layout:grid cols="2">
<layout:text property="studentEnrollment.enquiry.id<http://studentEnrollment.enquiry.id>"
key="Enquiry Id" size="5" readonly="true"/>
<layout:space/>
<layout:text property="studentEnrollment.studentCode" key="Student Code"
size="10" isRequired="true"/>
<layout:date key="Joining Date" property="studentEnrollment.joinDate"
layout="true" patternKey="dd/MM/yy" startYear="1970" isRequired="true"
maxlength="8" size="8"/>
<layout:select property="studentEnrollment.course.id<http://studentEnrollment.course.id>"
key="Course">
<layout:options collection="courseList" property="id" labelProperty="name"
sourceOf="studentEnrollment.batch.id <http://studentEnrollment.batch.id>"/>
</layout:select>
<layout:select property="studentEnrollment.batch.id<http://studentEnrollment.batch.id>"
key="Batch">
<layout:optionsDependent collection="batches" property="id"
labelProperty="name"
dependsFrom="studentEnrollment.course.id<http://studentEnrollment.course.id>
"/>
</layout:select>
<layout:text property="studentEnrollment.listPrice" key="List Price"
size="6"/>
<layout:text property="studentEnrollment.discount" key="Discount" size="6"/>
</layout:grid>
<br/>
<layout:checkbox property="studentEnrollment.declarationFormFlag"
key="Signed Declaration Form?"/>
<br/>
<layout:checkbox property="studentEnrollment.photographFlag" key="Submitted
Photographs? "/>
<br/>
<br/>
<br/>
<%@include file="StudentPaymentDetails.jsp"%>

<c:if test="${(operationVar=='create') || (operationVar=='update')}" >
<html:submit styleClass="formButton">${operationVar} </html:submit>
</c:if>
</html:form>
<html:javascript formName="studentEnrollmentForm"/>
</body>
</html>
 --------------------
 Note that I start with the StudentEnrollmentPre.do?operation=preCreate (as
Laurie suggested splitting up the actions into ones which require validation
and others which dont).
 When I submit press the submit without filling the required form fields
(namely the student code and joining date), I expect the validation should
kick in and be redirected based on the input parameter. But no such behavior
is being observed ! :(
 I am really clueless as to what is missing in here. Appologize for posting
so much information here... but this was my last resort!
 And what makes things complicated is that another similar set of
form/action/jsp classes seem to work with validation fine. And there seems
to be no major difference in which the action mappings are defined for this
set and the one which isnt working! :( I will post that also if you think it
will help debug the issue.
 Thanks again Laurie for the suggestions you have given so far. Even though
this problem persists, it still made me learn quite a bit about the
validator framework. Hopefully you can spot the mistake in this too ! :)
 Best Regards,
Raghu


 On 11/17/05, Laurie Harper <la...@holoweb.net> wrote:
>
> Raghu Kanchustambham wrote:
> > Thanks Laurie. It works with the way you suggested. But it makes a lot
> of
> > things clumsy..
> >
> > 1. I need to have different action class mappings potentially for each
> of
> > the CRUD operations... though all of them use the same dispatch action
> > class.
>
> Well, only for each case you need to apply different validation criteria
> for, but yes, you may need to have more than two mappings, depending on
> your requirements. You might look at wildcard action path mappings to
> help with this:
>
>
> http://struts.apache.org/struts-doc-1.2.7/userGuide/building_controller.html#action_mapping_wildcards
>
> I haven't really used dispatch actions, so there might be other options
> I don't know about.
>
> > 2. I still havent figured out a way where you need to pass some "state"
> > information as a part of the URL to an action... something like
> > StudentEnquiry.do?studentId=32 .... let us say that is the URL for the
> input
> > parameter of the action mapping.. how do i dynamically get the number
> "32"
> > there.
>
> Not sure I understand what you're asking there but I think the answer is
> that you need to add the parameter in your action before forwarding. If
> the 'state' information is part of the request you're validating and
> validation fails, you don't need to do anything since Struts will
> forward to the input mapping using the same request, which already
> contains your state information.
>
> > On this piece of actionform things are working.
> >
> > Having said that ..something seems to go wrong with a similar piece of
> > action form.
> >
> > I dont know what I am doing wrong .. can you please tell me what I am
> doing
> > wrong in the following:
> > <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> > path="/StudentEnrollment" scope="request" validate="true" type="
> > com.tuningfork.student.action.StudentEnrollmentAction"
> parameter="operation"
> > input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
> > StudentEnquiryUpdate.do">
> > <forward name="preCreateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> > <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> > <forward name="createSuccess" path="home"/>
> > </action>
> >
> > <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> > path="/StudentEnrollmentPre" scope="request"
> > validate="false" type="
> com.tuningfork.student.action.StudentEnrollmentAction"
> > parameter="operation">
> > <forward name="preCreateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> > <forward name="preUpdateSuccess"
> > path="/student/StudentEnrollment.jsp?nextOperation=update"/>
> > </action>
> >
> >
> >
> > /StudentEnrollmentPre.do is the operation with validation set to false.
> >
> > My quesiton: Is this good enuf for me to redirect to input parameter on
> > errors ?
> > Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn
> on
> > server side validation?
>
> Yes, that looks right...
>
> > when javascript validation is enabled through the <html:javascript> ...
> it
> > does client side validation and is able to figure out all the clientside
> > required fields with a "popup".
> >
> > However, I expect it to return back and show the form again from the
> server
> > side if my validation fails. But after the client side validation (which
> it
> > successfully detects that required fields are missing with a pop-up)..
> it
> > just proceeds as if no errors were there on the page.
> > In a nutshell the input tag is not being used
> >
> > Since javascript side is working fine I think validation.xml has no
> errors.
> > I will post it if you think you need to look at it too.
>
> If client side validation fails the form is never submitted so the
> server isn't involved. You need to enter valid data so client side
> validation succeeds before a request will actually get sent to the server.
>
> > On a side note, I have been chatting with one of the senior users of
> struts.
> > His opinion is that Struts framework creates lot more problems than it
> > solves. What is your opinion on it? Atleast this thing is really taking
> a
> > lot of my effort to get it going... but may be its too early for me to
> > comment on the validator framework as I am new to it.
>
> If you meant to say that 'Struts Validator framework create more
> problems...', I'd say it depends on your perspective. Some love it, some
> hate it. It certainly can be a bit tricky to get to grips with, and it
> only gets you so far; you'll still need to implement some types of
> validation yourself in addition to what validator can do for you.
>
> Personally, I use it for what it *can* do, and fall back to hand-coded
> validation for what it can't. Others perfer to stick to doing everything
> the same way. You'll have to make your own call on whether you want to
> stick with it or not once you've got it working well enough to
> understand the tradeoffs in your application.
>
> L.
>
> >
> > Thanks in advance.
> >
> > Regards,
> > Raghu
> >
> >
> > On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
> >
> >>The easiest way is probably to split your action mapping out into two
> >>mappings, one for the operations that should have validation applied and
> >>one for the setup operations that shouldn't. Set validate="false" on the
> >>mapping for the setup operations, and make it the input for the other
> >>mapping which will have validate="true".
> >>
> >>L.
> >>
> >>Raghu Kanchustambham wrote:
> >>
> >>>Thanks Laurie for the suggestion.
> >>>
> >>>>>>>Then set the 'input' attribute for your validating actions to point
> >>
> >>to
> >>
> >>>the pre-population action >>>> (so when validation fails, Struts
> >>
> >>forwards to
> >>
> >>>preCreate, not directly to the JSP).
> >>>That explains why the request variables are getting wiped off! :-) I
> >>>realize I am pointing directly to the JSP page. I changed it now to
> >>
> >>point to
> >>
> >>>preCreate.
> >>>However, I have only one action class for all these operations. I just
> >>>have various operations/functions inside that action class to handle
> >>
> >>them. I
> >>
> >>>use the dispatch action servlet and not the action servlet and
> >>
> >>preCreate,
> >>
> >>>create etc are various parameterized function calls on this dispacth
> >>
> >>action
> >>
> >>>class.
> >>>How would you achieve setting false and true on validations based on
> >>
> >>each
> >>
> >>>operation in dispatch action?
> >>>I am posting some relevant portions of my struts-config.xml. The minute
> >>
> >>I
> >>
> >>>changed validate="true", I am getting an exception. And I think I can
> >>>explain it. It is validating before the user inputs anything. Naturally
> >>
> >>it
> >>
> >>>fails. Then it redirects to the same "input" page. Again fails
> >>
> >>validation...
> >>
> >>>its just going into an endless loop. :(
> >>>Please suggest whats the best way to work around this?
> >>>
> >>><form-bean name="studentEnquiryForm" type="
> >>>org.apache.struts.validator.DynaValidatorForm">
> >>><form-property name="studentEnquiry" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
> >>><form-property name="contactAddress" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
> >>><form-property name="permanentAddress" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
> >>><form-property name="educationDetails" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
> >>>size="4"/>
> >>><form-property name="workExperience" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
> >>><form-property name="enquiryCentreId" type="java.lang.Integer"/>
> >>><form-property name="enquiryCourseId" type=" java.lang.Integer"/>
> >>><form-property name="studentEnquiryId" type="java.lang.Integer"/>
> >>><form-property name="newsPaperIds" type="int[]"/>
> >>><form-property name="discoverySourceIds" type="int[]"/>
> >>><form-property name="centreTimePreferences" type="
> >>>
> >>
> >>
> com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
> >>[]"
> >>
> >>>size="3"/>
> >>>
> >>><form-property name="studentEnquiryFilter" type="
> >>>com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
> >>></form-bean>
> >>>
> >>><action attribute="studentEnquiryForm" name="studentEnquiryForm"
> >>>path="/StudentEnquiry" scope="request"
> >>>validate="false" type="
> >>
> >>com.tuningfork.student.action.StudentEnquiryAction"
> >>
> >>>parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
> >>><forward name="preCreateSuccess"
> >>>path="/student/StudentEnquiry.jsp?nextOperation=create"/>
> >>><forward name="preUpdateSuccess"
> >>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >>>
> >>><forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
> >>><forward name="createSuccess" path="home"/>
> >>>
> >>><forward name="initFilterForUpdateSuccess"
> >>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> >>><forward name="prepareListForUpdateSuccess"
> >>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> >>><forward name="updateSuccess"
> >>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >>>
> >>></action>
> >>>
> >>>
> >>>On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
> >>>
> >>>
> >>>>The trick is to only include validation on the data processing
> actions,
> >>>>not on the pre-display actions ( i.e. use validate="false" on your
> >>>>preCreate action mapping, and only put validate="true" on the action
> you
> >>>>submit the form to). Then set the 'input' attribute for your
> validating
> >>>>actions to point to the pre-population action (so when validation
> fails,
> >>>>Struts forwards to preCreate, not directly to the JSP).
> >>>>
> >>>>You don't need to use session scope for anything if you don't want to,
> >>>>you just have to make sure that you always display your JSP via your
> >>>>preCreate action.
> >>>>
> >>>>If that doesn't make sense, post your action mappings from
> >>>>struts-config.xml so we can see how you have things setup.
> >>>>
> >>>>L.
> >>>>
> >>>>Raghu Kanchustambham wrote:
> >>>>
> >>>>
> >>>>>I think I can explain it now.
> >>>>>I hit the action servlet first invoking preCreate function. This
> >>>>
> >>>>function
> >>>>
> >>>>
> >>>>>populates various lists of beans needed for dropdowns and put these
> >>>>
> >>>>lists in
> >>>>
> >>>>
> >>>>>the request object and forward to a JSP. The JSP reads these lists
> and
> >>>>>displays the dropdowns. So far so good!
> >>>>>preCreate --->request object populated with lists ---> JSP reads from
> >>>>>request for dropdown lists
> >>>>>Now... enter the Validation framework! I think it is hijacking this
> >>>>
> >>>>series!
> >>>>
> >>>>
> >>>>>preCreate ---> request populated with lists ---> Validator framework
> >>>>
> >>>>--->
> >>>>
> >>>>>JSP
> >>>>>Now the jump from Validator framework to JSP means that all request
> >>>>
> >>>>scope
> >>>>
> >>>>
> >>>>>objects (the lists) are lost! :(
> >>>>>How should I architect ? Should I make these lists session scope? I
> >>>>
> >>>>somehow
> >>>>
> >>>>
> >>>>>dont like to make them session scope, because they are really request
> >>>>
> >>>>scope!
> >>>>
> >>>>
> >>>>>Can someone comment on my explanation / help me with a solution ??
> >>>>>Thanks much.
> >>>>>Regards,
> >>>>>Raghu
> >>>>>
> >>>>>
> >>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> >>>>>>Martin-
> >>>>>>----- Original Message -----
> >>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>>>Sent: Saturday, November 12, 2005 10:37 AM
> >>>>>>Subject: Re: Fw: Validator framework introduces errors
> >>>>>>
> >>>>>>
> >>>>>>Hi Martin,
> >>>>>>I do something like:
> >>>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
> >>>>>>before invoking the jsp.
> >>>>>>The strange part is, the minute i remove validation.xml from the
> >>>>
> >>>>validator
> >>>>
> >>>>
> >>>>>>path, effectively removing the validation framework, every thing
> works
> >>>>>>just
> >>>>>>fine! Just cant explain it ! :(
> >>>>>>Thanks again in advance to anyone who can explain this!
> >>>>>>Please find the StudentEnquiry.jsp attached.
> >>>>>>----------------------------------------
> >>>>>>
> >>>>>><%@ page import="
> >>>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> >>
> >>"%>
> >>
> >>>>>><%@ page language="java" %>
> >>>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
> >>>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> >>>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> >>>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> >>>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >>>>>>
> >>>>>><layout:html>
> >>>>>><head>
> >>>>>><title>Student Enquiry</title>
> >>>>>>
> >>>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
> >>>>>><SCRIPT>function set(target) { document.forms
> >>>>>>[0].operation.value=target;}</SCRIPT>
> >>>>>></head>
> >>>>>><body>
> >>>>>><h2>Student Enquiry</h2>
> >>>>>><html:errors/>
> >>>>>><c:set var="operationVar">
> >>>>>><%= request.getParameter("nextOperation")%>
> >>>>>></c:set>
> >>>>>>
> >>>>>><c:set var="readOnlyForm"> false </c:set>
> >>>>>>
> >>>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!--
> view
> >>>>>>doesnt
> >>>>>>have a Next operation -->
> >>>>>><c:set var="readOnlyForm"> true </c:set>
> >>>>>></c:if>
> >>>>>><html:form action="StudentEnquiry.do"
> >>>>>>onsubmit="validateStudentEnquiryForm(this);">
> >>>>>><input type="hidden" name="operation"
> >>>>>>value="<%=request.getParameter("nextOperation")%>"
> >>>>>>/>
> >>>>>><table width="100%">
> >>>>>><tr>
> >>>>>><td rowspan="2">
> >>>>>><%@include file="StudentDemographics.jsp"%>
> >>>>>></td>
> >>>>>><td>
> >>>>>><layout:grid cols="2">
> >>>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
> >>>>>>key="Enquiry Centre">
> >>>>>><layout:options collection ="centreList" property="id"
> >>
> >>labelName="name"
> >>
> >>>>/>
> >>>>
> >>>>>></layout:select>
> >>>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
> >>>>>>key="Enquiry Course">
> >>>>>><layout:optionsCollection name="courseList" value="id"
> label="name"/>
> >>>>>></layout:select>
> >>>>>></layout:grid>
> >>>>>>
> >>>>>></td>
> >>>>>></tr>
> >>>>>>
> >>>>>>
> >>>>>><tr>
> >>>>>><td>
> >>>>>></td>
> >>>>>><td align="center">
> >>>>>><html:submit>${operationVar} </html:submit>
> >>>>>><html:cancel>cancel</html:cancel>
> >>>>>></td>
> >>>>>></tr>
> >>>>>>
> >>>>>></table>
> >>>>>>
> >>>>>>
> >>>>>></html:form>
> >>>>>>
> >>>>>></body>
> >>>>>></layout:html>
> >>>>>>------------------------------------------------
> >>>>>>
> >>>>>>
> >>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
> >>>>>>
> >>>>>>centreList
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>bean?
> >>>>>>>I also dont see the code for centreList bean?
> >>>>>>>
> >>>>>>>Martin-
> >>>>>>>
> >>>>>>>----- Original Message -----
> >>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>>>>Sent: Saturday, November 12, 2005 9:40 AM
> >>>>>>>Subject: Validator framework introduces errors
> >>>>>>>
> >>>>>>>
> >>>>>>>Hi,
> >>>>>>>The minute I introduced Validator framework in my application .....
> >>>>>>>it started giving me the following error when I accessed the JSP
> ....
> >>>>>>>centreList is used as a parameter for the dropdown. The minute I
> >>
> >>remove
> >>
> >>>>>>>the
> >>>>>>>validation.xml from the path... the application runs fine again! :(
> >>>>>>>very strange and i am not able to explain this behavior .. can
> >>
> >>someone
> >>
> >>>>>>>help?
> >>>>>>>Thanks much in advance.
> >>>>>>>Regards,
> >>>>>>>Raghu
> >>>>>>>
> >>>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
> >>>>
> >>>>scope
> >>>>
> >>>>
> >>>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
> >>>>>>>
> fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
> >>
> >>(
> >>
> >>>>>>>OptionsCollectionTag.java:115)
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> >>
> >>>>>>>(StudentEnquiry_jsp.java:1088)
> >>>>>>>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> >>>>>>>(StudentEnquiry_jsp.java:1062)
> >>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> >>>>>>>(StudentEnquiry_jsp.java:1028)
> >>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
> >>>>>>>(StudentEnquiry_jsp.java:258)
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>My validation.xml (very simple one):
> >>>>>>>
> >>>>>>><!DOCTYPE form-validation PUBLIC
> >>>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
> >>>>>>>Configuration 1.0//EN"
> >>>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> >>>>>>>
> >>>>>>>
> >>>>>>><form-validation>
> >>>>>>><formset>
> >>>>>>><form name="studentEnquiryForm">
> >>>>>>><field property="studentEnquiry.firstName" depends="required">
> >>>>>>><arg0 key=" firstName.mandatory"/>
> >>>>>>></field>
> >>>>>>></form>
> >>>>>>></formset>
> >>>>>>></form-validation>
> >>>>>>>
> >>>>---------------------------------------------------------------------
> >>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>>>For additional commands, e-mail: user-help@struts.apache.org
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Validator framework hijacks requests! :(

Posted by Laurie Harper <la...@holoweb.net>.
Raghu Kanchustambham wrote:
> Thanks Laurie. It works with the way you suggested. But it makes a lot of
> things clumsy..
> 
> 1. I need to have different action class mappings potentially for each of
> the CRUD operations... though all of them use the same dispatch action
> class.

Well, only for each case you need to apply different validation criteria 
for, but yes, you may need to have more than two mappings, depending on 
your requirements. You might look at wildcard action path mappings to 
help with this:

http://struts.apache.org/struts-doc-1.2.7/userGuide/building_controller.html#action_mapping_wildcards

I haven't really used dispatch actions, so there might be other options 
I don't know about.

> 2. I still havent figured out a way where you need to pass some "state"
> information as a part of the URL to an action... something like
> StudentEnquiry.do?studentId=32 .... let us say that is the URL for the input
> parameter of the action mapping.. how do i dynamically get the number "32"
> there.

Not sure I understand what you're asking there but I think the answer is 
that you need to add the parameter in your action before forwarding. If 
the 'state' information is part of the request you're validating and 
validation fails, you don't need to do anything since Struts will 
forward to the input mapping using the same request, which already 
contains your state information.

> On this piece of actionform things are working.
> 
> Having said that ..something seems to go wrong with a similar piece of
> action form.
> 
> I dont know what I am doing wrong .. can you please tell me what I am doing
> wrong in the following:
> <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> path="/StudentEnrollment" scope="request" validate="true" type="
> com.tuningfork.student.action.StudentEnrollmentAction" parameter="operation"
> input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
> StudentEnquiryUpdate.do">
> <forward name="preCreateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> <forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
> <forward name="createSuccess" path="home"/>
> </action>
> 
> <action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
> path="/StudentEnrollmentPre" scope="request"
> validate="false" type="com.tuningfork.student.action.StudentEnrollmentAction"
> parameter="operation">
> <forward name="preCreateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=create"/>
> <forward name="preUpdateSuccess"
> path="/student/StudentEnrollment.jsp?nextOperation=update"/>
> </action>
> 
> 
> 
> /StudentEnrollmentPre.do is the operation with validation set to false.
> 
> My quesiton: Is this good enuf for me to redirect to input parameter on
> errors ?
> Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn on
> server side validation?

Yes, that looks right...

> when javascript validation is enabled through the <html:javascript> ... it
> does client side validation and is able to figure out all the clientside
> required fields with a "popup".
> 
> However, I expect it to return back and show the form again from the server
> side if my validation fails. But after the client side validation (which it
> successfully detects that required fields are missing with a pop-up).. it
> just proceeds as if no errors were there on the page.
> In a nutshell the input tag is not being used
> 
> Since javascript side is working fine I think validation.xml has no errors.
> I will post it if you think you need to look at it too.

If client side validation fails the form is never submitted so the 
server isn't involved. You need to enter valid data so client side 
validation succeeds before a request will actually get sent to the server.

> On a side note, I have been chatting with one of the senior users of struts.
> His opinion is that Struts framework creates lot more problems than it
> solves. What is your opinion on it? Atleast this thing is really taking a
> lot of my effort to get it going... but may be its too early for me to
> comment on the validator framework as I am new to it.

If you meant to say that 'Struts Validator framework create more 
problems...', I'd say it depends on your perspective. Some love it, some 
hate it. It certainly can be a bit tricky to get to grips with, and it 
only gets you so far; you'll still need to implement some types of 
validation yourself in addition to what validator can do for you.

Personally, I use it for what it *can* do, and fall back to hand-coded 
validation for what it can't. Others perfer to stick to doing everything 
the same way. You'll have to make your own call on whether you want to 
stick with it or not once you've got it working well enough to 
understand the tradeoffs in your application.

L.

> 
> Thanks in advance.
> 
> Regards,
> Raghu
> 
> 
> On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
> 
>>The easiest way is probably to split your action mapping out into two
>>mappings, one for the operations that should have validation applied and
>>one for the setup operations that shouldn't. Set validate="false" on the
>>mapping for the setup operations, and make it the input for the other
>>mapping which will have validate="true".
>>
>>L.
>>
>>Raghu Kanchustambham wrote:
>>
>>>Thanks Laurie for the suggestion.
>>>
>>>>>>>Then set the 'input' attribute for your validating actions to point
>>
>>to
>>
>>>the pre-population action >>>> (so when validation fails, Struts
>>
>>forwards to
>>
>>>preCreate, not directly to the JSP).
>>>That explains why the request variables are getting wiped off! :-) I
>>>realize I am pointing directly to the JSP page. I changed it now to
>>
>>point to
>>
>>>preCreate.
>>>However, I have only one action class for all these operations. I just
>>>have various operations/functions inside that action class to handle
>>
>>them. I
>>
>>>use the dispatch action servlet and not the action servlet and
>>
>>preCreate,
>>
>>>create etc are various parameterized function calls on this dispacth
>>
>>action
>>
>>>class.
>>>How would you achieve setting false and true on validations based on
>>
>>each
>>
>>>operation in dispatch action?
>>>I am posting some relevant portions of my struts-config.xml. The minute
>>
>>I
>>
>>>changed validate="true", I am getting an exception. And I think I can
>>>explain it. It is validating before the user inputs anything. Naturally
>>
>>it
>>
>>>fails. Then it redirects to the same "input" page. Again fails
>>
>>validation...
>>
>>>its just going into an endless loop. :(
>>>Please suggest whats the best way to work around this?
>>>
>>><form-bean name="studentEnquiryForm" type="
>>>org.apache.struts.validator.DynaValidatorForm">
>>><form-property name="studentEnquiry" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
>>><form-property name="contactAddress" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
>>><form-property name="permanentAddress" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
>>><form-property name="educationDetails" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
>>>size="4"/>
>>><form-property name="workExperience" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
>>><form-property name="enquiryCentreId" type="java.lang.Integer"/>
>>><form-property name="enquiryCourseId" type=" java.lang.Integer"/>
>>><form-property name="studentEnquiryId" type="java.lang.Integer"/>
>>><form-property name="newsPaperIds" type="int[]"/>
>>><form-property name="discoverySourceIds" type="int[]"/>
>>><form-property name="centreTimePreferences" type="
>>>
>>
>>com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
>>[]"
>>
>>>size="3"/>
>>>
>>><form-property name="studentEnquiryFilter" type="
>>>com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
>>></form-bean>
>>>
>>><action attribute="studentEnquiryForm" name="studentEnquiryForm"
>>>path="/StudentEnquiry" scope="request"
>>>validate="false" type="
>>
>>com.tuningfork.student.action.StudentEnquiryAction"
>>
>>>parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
>>><forward name="preCreateSuccess"
>>>path="/student/StudentEnquiry.jsp?nextOperation=create"/>
>>><forward name="preUpdateSuccess"
>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>
>>><forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
>>><forward name="createSuccess" path="home"/>
>>>
>>><forward name="initFilterForUpdateSuccess"
>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>><forward name="prepareListForUpdateSuccess"
>>>path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
>>><forward name="updateSuccess"
>>>path="/student/StudentEnquiry.jsp?nextOperation=update"/>
>>>
>>></action>
>>>
>>>
>>>On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
>>>
>>>
>>>>The trick is to only include validation on the data processing actions,
>>>>not on the pre-display actions ( i.e. use validate="false" on your
>>>>preCreate action mapping, and only put validate="true" on the action you
>>>>submit the form to). Then set the 'input' attribute for your validating
>>>>actions to point to the pre-population action (so when validation fails,
>>>>Struts forwards to preCreate, not directly to the JSP).
>>>>
>>>>You don't need to use session scope for anything if you don't want to,
>>>>you just have to make sure that you always display your JSP via your
>>>>preCreate action.
>>>>
>>>>If that doesn't make sense, post your action mappings from
>>>>struts-config.xml so we can see how you have things setup.
>>>>
>>>>L.
>>>>
>>>>Raghu Kanchustambham wrote:
>>>>
>>>>
>>>>>I think I can explain it now.
>>>>>I hit the action servlet first invoking preCreate function. This
>>>>
>>>>function
>>>>
>>>>
>>>>>populates various lists of beans needed for dropdowns and put these
>>>>
>>>>lists in
>>>>
>>>>
>>>>>the request object and forward to a JSP. The JSP reads these lists and
>>>>>displays the dropdowns. So far so good!
>>>>>preCreate --->request object populated with lists ---> JSP reads from
>>>>>request for dropdown lists
>>>>>Now... enter the Validation framework! I think it is hijacking this
>>>>
>>>>series!
>>>>
>>>>
>>>>>preCreate ---> request populated with lists ---> Validator framework
>>>>
>>>>--->
>>>>
>>>>>JSP
>>>>>Now the jump from Validator framework to JSP means that all request
>>>>
>>>>scope
>>>>
>>>>
>>>>>objects (the lists) are lost! :(
>>>>>How should I architect ? Should I make these lists session scope? I
>>>>
>>>>somehow
>>>>
>>>>
>>>>>dont like to make them session scope, because they are really request
>>>>
>>>>scope!
>>>>
>>>>
>>>>>Can someone comment on my explanation / help me with a solution ??
>>>>>Thanks much.
>>>>>Regards,
>>>>>Raghu
>>>>>
>>>>>
>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
>>>>>>Martin-
>>>>>>----- Original Message -----
>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>Sent: Saturday, November 12, 2005 10:37 AM
>>>>>>Subject: Re: Fw: Validator framework introduces errors
>>>>>>
>>>>>>
>>>>>>Hi Martin,
>>>>>>I do something like:
>>>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
>>>>>>before invoking the jsp.
>>>>>>The strange part is, the minute i remove validation.xml from the
>>>>
>>>>validator
>>>>
>>>>
>>>>>>path, effectively removing the validation framework, every thing works
>>>>>>just
>>>>>>fine! Just cant explain it ! :(
>>>>>>Thanks again in advance to anyone who can explain this!
>>>>>>Please find the StudentEnquiry.jsp attached.
>>>>>>----------------------------------------
>>>>>>
>>>>>><%@ page import="
>>>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
>>
>>"%>
>>
>>>>>><%@ page language="java" %>
>>>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
>>>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>>>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>>>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>>>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>>>>>
>>>>>><layout:html>
>>>>>><head>
>>>>>><title>Student Enquiry</title>
>>>>>>
>>>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
>>>>>><SCRIPT>function set(target) { document.forms
>>>>>>[0].operation.value=target;}</SCRIPT>
>>>>>></head>
>>>>>><body>
>>>>>><h2>Student Enquiry</h2>
>>>>>><html:errors/>
>>>>>><c:set var="operationVar">
>>>>>><%= request.getParameter("nextOperation")%>
>>>>>></c:set>
>>>>>>
>>>>>><c:set var="readOnlyForm"> false </c:set>
>>>>>>
>>>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
>>>>>>doesnt
>>>>>>have a Next operation -->
>>>>>><c:set var="readOnlyForm"> true </c:set>
>>>>>></c:if>
>>>>>><html:form action="StudentEnquiry.do"
>>>>>>onsubmit="validateStudentEnquiryForm(this);">
>>>>>><input type="hidden" name="operation"
>>>>>>value="<%=request.getParameter("nextOperation")%>"
>>>>>>/>
>>>>>><table width="100%">
>>>>>><tr>
>>>>>><td rowspan="2">
>>>>>><%@include file="StudentDemographics.jsp"%>
>>>>>></td>
>>>>>><td>
>>>>>><layout:grid cols="2">
>>>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
>>>>>>key="Enquiry Centre">
>>>>>><layout:options collection ="centreList" property="id"
>>
>>labelName="name"
>>
>>>>/>
>>>>
>>>>>></layout:select>
>>>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
>>>>>>key="Enquiry Course">
>>>>>><layout:optionsCollection name="courseList" value="id" label="name"/>
>>>>>></layout:select>
>>>>>></layout:grid>
>>>>>>
>>>>>></td>
>>>>>></tr>
>>>>>>
>>>>>>
>>>>>><tr>
>>>>>><td>
>>>>>></td>
>>>>>><td align="center">
>>>>>><html:submit>${operationVar} </html:submit>
>>>>>><html:cancel>cancel</html:cancel>
>>>>>></td>
>>>>>></tr>
>>>>>>
>>>>>></table>
>>>>>>
>>>>>>
>>>>>></html:form>
>>>>>>
>>>>>></body>
>>>>>></layout:html>
>>>>>>------------------------------------------------
>>>>>>
>>>>>>
>>>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
>>>>>>
>>>>>>centreList
>>>>>>
>>>>>>
>>>>>>
>>>>>>>bean?
>>>>>>>I also dont see the code for centreList bean?
>>>>>>>
>>>>>>>Martin-
>>>>>>>
>>>>>>>----- Original Message -----
>>>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>>>Sent: Saturday, November 12, 2005 9:40 AM
>>>>>>>Subject: Validator framework introduces errors
>>>>>>>
>>>>>>>
>>>>>>>Hi,
>>>>>>>The minute I introduced Validator framework in my application .....
>>>>>>>it started giving me the following error when I accessed the JSP ....
>>>>>>>centreList is used as a parameter for the dropdown. The minute I
>>
>>remove
>>
>>>>>>>the
>>>>>>>validation.xml from the path... the application runs fine again! :(
>>>>>>>very strange and i am not able to explain this behavior .. can
>>
>>someone
>>
>>>>>>>help?
>>>>>>>Thanks much in advance.
>>>>>>>Regards,
>>>>>>>Raghu
>>>>>>>
>>>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
>>>>
>>>>scope
>>>>
>>>>
>>>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
>>>>>>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
>>
>>(
>>
>>>>>>>OptionsCollectionTag.java:115)
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
>>
>>>>>>>(StudentEnquiry_jsp.java:1088)
>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
>>>>>>>(StudentEnquiry_jsp.java:1062)
>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
>>>>>>>(StudentEnquiry_jsp.java:1028)
>>>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
>>>>>>>(StudentEnquiry_jsp.java:258)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>My validation.xml (very simple one):
>>>>>>>
>>>>>>><!DOCTYPE form-validation PUBLIC
>>>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
>>>>>>>Configuration 1.0//EN"
>>>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
>>>>>>>
>>>>>>>
>>>>>>><form-validation>
>>>>>>><formset>
>>>>>>><form name="studentEnquiryForm">
>>>>>>><field property="studentEnquiry.firstName" depends="required">
>>>>>>><arg0 key=" firstName.mandatory"/>
>>>>>>></field>
>>>>>>></form>
>>>>>>></formset>
>>>>>>></form-validation>
>>>>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 


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


Re: Validator framework hijacks requests! :(

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Thanks Laurie. It works with the way you suggested. But it makes a lot of
things clumsy..

1. I need to have different action class mappings potentially for each of
the CRUD operations... though all of them use the same dispatch action
class.

2. I still havent figured out a way where you need to pass some "state"
information as a part of the URL to an action... something like
StudentEnquiry.do?studentId=32 .... let us say that is the URL for the input
parameter of the action mapping.. how do i dynamically get the number "32"
there.

But it works for the time being.


On this piece of actionform things are working.

Having said that ..something seems to go wrong with a similar piece of
action form.

I dont know what I am doing wrong .. can you please tell me what I am doing
wrong in the following:
<action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
path="/StudentEnrollment" scope="request" validate="true" type="
com.tuningfork.student.action.StudentEnrollmentAction" parameter="operation"
input="/StudentEnrollmentPre.do?operation=preCreate&amp;postTo=
StudentEnquiryUpdate.do">
<forward name="preCreateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=create"/>
<forward name="viewSuccess" path="/student/StudentEnrollment.jsp"/>
<forward name="createSuccess" path="home"/>
</action>

<action attribute="studentEnrollmentForm" name="studentEnrollmentForm"
path="/StudentEnrollmentPre" scope="request"
validate="false" type="com.tuningfork.student.action.StudentEnrollmentAction"
parameter="operation">
<forward name="preCreateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=create"/>
<forward name="preUpdateSuccess"
path="/student/StudentEnrollment.jsp?nextOperation=update"/>
</action>



/StudentEnrollmentPre.do is the operation with validation set to false.

My quesiton: Is this good enuf for me to redirect to input parameter on
errors ?
Is setting validate="true" and input="/StudentEnrollmentPre.do" to turn on
server side validation?

when javascript validation is enabled through the <html:javascript> ... it
does client side validation and is able to figure out all the clientside
required fields with a "popup".

However, I expect it to return back and show the form again from the server
side if my validation fails. But after the client side validation (which it
successfully detects that required fields are missing with a pop-up).. it
just proceeds as if no errors were there on the page.
In a nutshell the input tag is not being used

Since javascript side is working fine I think validation.xml has no errors.
I will post it if you think you need to look at it too.


On a side note, I have been chatting with one of the senior users of struts.
His opinion is that Struts framework creates lot more problems than it
solves. What is your opinion on it? Atleast this thing is really taking a
lot of my effort to get it going... but may be its too early for me to
comment on the validator framework as I am new to it.

Thanks in advance.

Regards,
Raghu


On 11/14/05, Laurie Harper <la...@holoweb.net> wrote:
>
> The easiest way is probably to split your action mapping out into two
> mappings, one for the operations that should have validation applied and
> one for the setup operations that shouldn't. Set validate="false" on the
> mapping for the setup operations, and make it the input for the other
> mapping which will have validate="true".
>
> L.
>
> Raghu Kanchustambham wrote:
> > Thanks Laurie for the suggestion.
> > >>>> Then set the 'input' attribute for your validating actions to point
> to
> > the pre-population action >>>> (so when validation fails, Struts
> forwards to
> > preCreate, not directly to the JSP).
> > That explains why the request variables are getting wiped off! :-) I
> > realize I am pointing directly to the JSP page. I changed it now to
> point to
> > preCreate.
> > However, I have only one action class for all these operations. I just
> > have various operations/functions inside that action class to handle
> them. I
> > use the dispatch action servlet and not the action servlet and
> preCreate,
> > create etc are various parameterized function calls on this dispacth
> action
> > class.
> > How would you achieve setting false and true on validations based on
> each
> > operation in dispatch action?
> > I am posting some relevant portions of my struts-config.xml. The minute
> I
> > changed validate="true", I am getting an exception. And I think I can
> > explain it. It is validating before the user inputs anything. Naturally
> it
> > fails. Then it redirects to the same "input" page. Again fails
> validation...
> > its just going into an endless loop. :(
> > Please suggest whats the best way to work around this?
> >
> > <form-bean name="studentEnquiryForm" type="
> > org.apache.struts.validator.DynaValidatorForm">
> > <form-property name="studentEnquiry" type="
> > com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
> > <form-property name="contactAddress" type="
> > com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
> > <form-property name="permanentAddress" type="
> > com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
> > <form-property name="educationDetails" type="
> > com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
> > size="4"/>
> > <form-property name="workExperience" type="
> > com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
> > <form-property name="enquiryCentreId" type="java.lang.Integer"/>
> > <form-property name="enquiryCourseId" type=" java.lang.Integer"/>
> > <form-property name="studentEnquiryId" type="java.lang.Integer"/>
> > <form-property name="newsPaperIds" type="int[]"/>
> > <form-property name="discoverySourceIds" type="int[]"/>
> > <form-property name="centreTimePreferences" type="
> >
> com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference
> []"
> > size="3"/>
> >
> > <form-property name="studentEnquiryFilter" type="
> > com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
> > </form-bean>
> >
> > <action attribute="studentEnquiryForm" name="studentEnquiryForm"
> > path="/StudentEnquiry" scope="request"
> > validate="false" type="
> com.tuningfork.student.action.StudentEnquiryAction"
> > parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
> > <forward name="preCreateSuccess"
> > path="/student/StudentEnquiry.jsp?nextOperation=create"/>
> > <forward name="preUpdateSuccess"
> > path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >
> > <forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
> > <forward name="createSuccess" path="home"/>
> >
> > <forward name="initFilterForUpdateSuccess"
> > path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> > <forward name="prepareListForUpdateSuccess"
> > path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> > <forward name="updateSuccess"
> > path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> >
> > </action>
> >
> >
> > On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
> >
> >>The trick is to only include validation on the data processing actions,
> >>not on the pre-display actions ( i.e. use validate="false" on your
> >>preCreate action mapping, and only put validate="true" on the action you
> >>submit the form to). Then set the 'input' attribute for your validating
> >>actions to point to the pre-population action (so when validation fails,
> >>Struts forwards to preCreate, not directly to the JSP).
> >>
> >>You don't need to use session scope for anything if you don't want to,
> >>you just have to make sure that you always display your JSP via your
> >>preCreate action.
> >>
> >>If that doesn't make sense, post your action mappings from
> >>struts-config.xml so we can see how you have things setup.
> >>
> >>L.
> >>
> >>Raghu Kanchustambham wrote:
> >>
> >>>I think I can explain it now.
> >>>I hit the action servlet first invoking preCreate function. This
> >>
> >>function
> >>
> >>>populates various lists of beans needed for dropdowns and put these
> >>
> >>lists in
> >>
> >>>the request object and forward to a JSP. The JSP reads these lists and
> >>>displays the dropdowns. So far so good!
> >>>preCreate --->request object populated with lists ---> JSP reads from
> >>>request for dropdown lists
> >>>Now... enter the Validation framework! I think it is hijacking this
> >>
> >>series!
> >>
> >>>preCreate ---> request populated with lists ---> Validator framework
> >>
> >>--->
> >>
> >>>JSP
> >>>Now the jump from Validator framework to JSP means that all request
> >>
> >>scope
> >>
> >>>objects (the lists) are lost! :(
> >>>How should I architect ? Should I make these lists session scope? I
> >>
> >>somehow
> >>
> >>>dont like to make them session scope, because they are really request
> >>
> >>scope!
> >>
> >>>Can someone comment on my explanation / help me with a solution ??
> >>>Thanks much.
> >>>Regards,
> >>>Raghu
> >>>
> >>>
> >>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>
> >>>
> >>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> >>>>Martin-
> >>>>----- Original Message -----
> >>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>Sent: Saturday, November 12, 2005 10:37 AM
> >>>>Subject: Re: Fw: Validator framework introduces errors
> >>>>
> >>>>
> >>>>Hi Martin,
> >>>>I do something like:
> >>>>request.setAttribute("centreList",DataAccessManager.getCentres());
> >>>>before invoking the jsp.
> >>>>The strange part is, the minute i remove validation.xml from the
> >>
> >>validator
> >>
> >>>>path, effectively removing the validation framework, every thing works
> >>>>just
> >>>>fine! Just cant explain it ! :(
> >>>>Thanks again in advance to anyone who can explain this!
> >>>>Please find the StudentEnquiry.jsp attached.
> >>>>----------------------------------------
> >>>>
> >>>><%@ page import="
> >>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> "%>
> >>>><%@ page language="java" %>
> >>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
> >>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> >>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> >>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> >>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >>>>
> >>>><layout:html>
> >>>><head>
> >>>><title>Student Enquiry</title>
> >>>>
> >>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
> >>>><SCRIPT>function set(target) { document.forms
> >>>>[0].operation.value=target;}</SCRIPT>
> >>>></head>
> >>>><body>
> >>>><h2>Student Enquiry</h2>
> >>>><html:errors/>
> >>>><c:set var="operationVar">
> >>>><%= request.getParameter("nextOperation")%>
> >>>></c:set>
> >>>>
> >>>><c:set var="readOnlyForm"> false </c:set>
> >>>>
> >>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> >>>>doesnt
> >>>>have a Next operation -->
> >>>><c:set var="readOnlyForm"> true </c:set>
> >>>></c:if>
> >>>><html:form action="StudentEnquiry.do"
> >>>>onsubmit="validateStudentEnquiryForm(this);">
> >>>><input type="hidden" name="operation"
> >>>>value="<%=request.getParameter("nextOperation")%>"
> >>>>/>
> >>>><table width="100%">
> >>>><tr>
> >>>><td rowspan="2">
> >>>><%@include file="StudentDemographics.jsp"%>
> >>>></td>
> >>>><td>
> >>>><layout:grid cols="2">
> >>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
> >>>>key="Enquiry Centre">
> >>>><layout:options collection ="centreList" property="id"
> labelName="name"
> >>
> >>/>
> >>
> >>>></layout:select>
> >>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
> >>>>key="Enquiry Course">
> >>>><layout:optionsCollection name="courseList" value="id" label="name"/>
> >>>></layout:select>
> >>>></layout:grid>
> >>>>
> >>>></td>
> >>>></tr>
> >>>>
> >>>>
> >>>><tr>
> >>>><td>
> >>>></td>
> >>>><td align="center">
> >>>><html:submit>${operationVar} </html:submit>
> >>>><html:cancel>cancel</html:cancel>
> >>>></td>
> >>>></tr>
> >>>>
> >>>></table>
> >>>>
> >>>>
> >>>></html:form>
> >>>>
> >>>></body>
> >>>></layout:html>
> >>>>------------------------------------------------
> >>>>
> >>>>
> >>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>>>
> >>>>
> >>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
> >>>>
> >>>>centreList
> >>>>
> >>>>
> >>>>>bean?
> >>>>>I also dont see the code for centreList bean?
> >>>>>
> >>>>>Martin-
> >>>>>
> >>>>>----- Original Message -----
> >>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>>>Sent: Saturday, November 12, 2005 9:40 AM
> >>>>>Subject: Validator framework introduces errors
> >>>>>
> >>>>>
> >>>>>Hi,
> >>>>>The minute I introduced Validator framework in my application .....
> >>>>>it started giving me the following error when I accessed the JSP ....
> >>>>>centreList is used as a parameter for the dropdown. The minute I
> remove
> >>
> >>>>>the
> >>>>>validation.xml from the path... the application runs fine again! :(
> >>>>>very strange and i am not able to explain this behavior .. can
> someone
> >>>>>help?
> >>>>>Thanks much in advance.
> >>>>>Regards,
> >>>>>Raghu
> >>>>>
> >>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
> >>
> >>scope
> >>
> >>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
> >>>>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag
> (
> >>>>>OptionsCollectionTag.java:115)
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> >>
> >>>>>(StudentEnquiry_jsp.java:1088)
> >>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> >>>>>(StudentEnquiry_jsp.java:1062)
> >>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> >>>>>(StudentEnquiry_jsp.java:1028)
> >>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
> >>>>>(StudentEnquiry_jsp.java:258)
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>My validation.xml (very simple one):
> >>>>>
> >>>>><!DOCTYPE form-validation PUBLIC
> >>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
> >>>>>Configuration 1.0//EN"
> >>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> >>>>>
> >>>>>
> >>>>><form-validation>
> >>>>><formset>
> >>>>><form name="studentEnquiryForm">
> >>>>><field property="studentEnquiry.firstName" depends="required">
> >>>>><arg0 key=" firstName.mandatory"/>
> >>>>></field>
> >>>>></form>
> >>>>></formset>
> >>>>></form-validation>
> >>>>>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Validator framework hijacks requests! :(

Posted by Laurie Harper <la...@holoweb.net>.
The easiest way is probably to split your action mapping out into two 
mappings, one for the operations that should have validation applied and 
one for the setup operations that shouldn't. Set validate="false" on the 
mapping for the setup operations, and make it the input for the other 
mapping which will have validate="true".

L.

Raghu Kanchustambham wrote:
> Thanks Laurie for the suggestion.
>  >>>> Then set the 'input' attribute for your validating actions to point to
> the pre-population action >>>> (so when validation fails, Struts forwards to
> preCreate, not directly to the JSP).
>  That explains why the request variables are getting wiped off! :-) I
> realize I am pointing directly to the JSP page. I changed it now to point to
> preCreate.
>   However, I have only one action class for all these operations. I just
> have various operations/functions inside that action class to handle them. I
> use the dispatch action servlet and not the action servlet and preCreate,
> create etc are various parameterized function calls on this dispacth action
> class.
>  How would you achieve setting false and true on validations based on each
> operation in dispatch action?
>  I am posting some relevant portions of my struts-config.xml. The minute I
> changed validate="true", I am getting an exception. And I think I can
> explain it. It is validating before the user inputs anything. Naturally it
> fails. Then it redirects to the same "input" page. Again fails validation...
> its just going into an endless loop. :(
>  Please suggest whats the best way to work around this?
> 
> <form-bean name="studentEnquiryForm" type="
> org.apache.struts.validator.DynaValidatorForm">
> <form-property name="studentEnquiry" type="
> com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
> <form-property name="contactAddress" type="
> com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
> <form-property name="permanentAddress" type="
> com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
> <form-property name="educationDetails" type="
> com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
> size="4"/>
> <form-property name="workExperience" type="
> com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
> <form-property name="enquiryCentreId" type="java.lang.Integer"/>
> <form-property name="enquiryCourseId" type=" java.lang.Integer"/>
> <form-property name="studentEnquiryId" type="java.lang.Integer"/>
> <form-property name="newsPaperIds" type="int[]"/>
> <form-property name="discoverySourceIds" type="int[]"/>
> <form-property name="centreTimePreferences" type="
> com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference[]"
> size="3"/>
> 
> <form-property name="studentEnquiryFilter" type="
> com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
> </form-bean>
> 
>   <action attribute="studentEnquiryForm" name="studentEnquiryForm"
> path="/StudentEnquiry" scope="request"
> validate="false" type="com.tuningfork.student.action.StudentEnquiryAction"
> parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
> <forward name="preCreateSuccess"
> path="/student/StudentEnquiry.jsp?nextOperation=create"/>
> <forward name="preUpdateSuccess"
> path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> 
> <forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
> <forward name="createSuccess" path="home"/>
> 
> <forward name="initFilterForUpdateSuccess"
> path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> <forward name="prepareListForUpdateSuccess"
> path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
> <forward name="updateSuccess"
> path="/student/StudentEnquiry.jsp?nextOperation=update"/>
> 
> </action>
> 
> 
>  On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
> 
>>The trick is to only include validation on the data processing actions,
>>not on the pre-display actions ( i.e. use validate="false" on your
>>preCreate action mapping, and only put validate="true" on the action you
>>submit the form to). Then set the 'input' attribute for your validating
>>actions to point to the pre-population action (so when validation fails,
>>Struts forwards to preCreate, not directly to the JSP).
>>
>>You don't need to use session scope for anything if you don't want to,
>>you just have to make sure that you always display your JSP via your
>>preCreate action.
>>
>>If that doesn't make sense, post your action mappings from
>>struts-config.xml so we can see how you have things setup.
>>
>>L.
>>
>>Raghu Kanchustambham wrote:
>>
>>>I think I can explain it now.
>>>I hit the action servlet first invoking preCreate function. This
>>
>>function
>>
>>>populates various lists of beans needed for dropdowns and put these
>>
>>lists in
>>
>>>the request object and forward to a JSP. The JSP reads these lists and
>>>displays the dropdowns. So far so good!
>>>preCreate --->request object populated with lists ---> JSP reads from
>>>request for dropdown lists
>>>Now... enter the Validation framework! I think it is hijacking this
>>
>>series!
>>
>>>preCreate ---> request populated with lists ---> Validator framework
>>
>>--->
>>
>>>JSP
>>>Now the jump from Validator framework to JSP means that all request
>>
>>scope
>>
>>>objects (the lists) are lost! :(
>>>How should I architect ? Should I make these lists session scope? I
>>
>>somehow
>>
>>>dont like to make them session scope, because they are really request
>>
>>scope!
>>
>>>Can someone comment on my explanation / help me with a solution ??
>>>Thanks much.
>>>Regards,
>>>Raghu
>>>
>>>
>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>
>>>
>>>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
>>>>Martin-
>>>>----- Original Message -----
>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>Sent: Saturday, November 12, 2005 10:37 AM
>>>>Subject: Re: Fw: Validator framework introduces errors
>>>>
>>>>
>>>>Hi Martin,
>>>>I do something like:
>>>>request.setAttribute("centreList",DataAccessManager.getCentres());
>>>>before invoking the jsp.
>>>>The strange part is, the minute i remove validation.xml from the
>>
>>validator
>>
>>>>path, effectively removing the validation framework, every thing works
>>>>just
>>>>fine! Just cant explain it ! :(
>>>>Thanks again in advance to anyone who can explain this!
>>>>Please find the StudentEnquiry.jsp attached.
>>>>----------------------------------------
>>>>
>>>><%@ page import="
>>>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail"%>
>>>><%@ page language="java" %>
>>>><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
>>>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>>>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>>>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>>>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>>>
>>>><layout:html>
>>>><head>
>>>><title>Student Enquiry</title>
>>>>
>>>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
>>>><SCRIPT>function set(target) { document.forms
>>>>[0].operation.value=target;}</SCRIPT>
>>>></head>
>>>><body>
>>>><h2>Student Enquiry</h2>
>>>><html:errors/>
>>>><c:set var="operationVar">
>>>><%= request.getParameter("nextOperation")%>
>>>></c:set>
>>>>
>>>><c:set var="readOnlyForm"> false </c:set>
>>>>
>>>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
>>>>doesnt
>>>>have a Next operation -->
>>>><c:set var="readOnlyForm"> true </c:set>
>>>></c:if>
>>>><html:form action="StudentEnquiry.do"
>>>>onsubmit="validateStudentEnquiryForm(this);">
>>>><input type="hidden" name="operation"
>>>>value="<%=request.getParameter("nextOperation")%>"
>>>>/>
>>>><table width="100%">
>>>><tr>
>>>><td rowspan="2">
>>>><%@include file="StudentDemographics.jsp"%>
>>>></td>
>>>><td>
>>>><layout:grid cols="2">
>>>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
>>>>key="Enquiry Centre">
>>>><layout:options collection ="centreList" property="id" labelName="name"
>>
>>/>
>>
>>>></layout:select>
>>>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
>>>>key="Enquiry Course">
>>>><layout:optionsCollection name="courseList" value="id" label="name"/>
>>>></layout:select>
>>>></layout:grid>
>>>>
>>>></td>
>>>></tr>
>>>>
>>>>
>>>><tr>
>>>><td>
>>>></td>
>>>><td align="center">
>>>><html:submit>${operationVar} </html:submit>
>>>><html:cancel>cancel</html:cancel>
>>>></td>
>>>></tr>
>>>>
>>>></table>
>>>>
>>>>
>>>></html:form>
>>>>
>>>></body>
>>>></layout:html>
>>>>------------------------------------------------
>>>>
>>>>
>>>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>>>
>>>>
>>>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
>>>>
>>>>centreList
>>>>
>>>>
>>>>>bean?
>>>>>I also dont see the code for centreList bean?
>>>>>
>>>>>Martin-
>>>>>
>>>>>----- Original Message -----
>>>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>>>To: "Struts Users Mailing List" < user@struts.apache.org>
>>>>>Sent: Saturday, November 12, 2005 9:40 AM
>>>>>Subject: Validator framework introduces errors
>>>>>
>>>>>
>>>>>Hi,
>>>>>The minute I introduced Validator framework in my application .....
>>>>>it started giving me the following error when I accessed the JSP ....
>>>>>centreList is used as a parameter for the dropdown. The minute I remove
>>
>>>>>the
>>>>>validation.xml from the path... the application runs fine again! :(
>>>>>very strange and i am not able to explain this behavior .. can someone
>>>>>help?
>>>>>Thanks much in advance.
>>>>>Regards,
>>>>>Raghu
>>>>>
>>>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
>>
>>scope
>>
>>>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
>>>>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
>>>>>OptionsCollectionTag.java:115)
>>>>>
>>>>>
>>>>
>>>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
>>
>>>>>(StudentEnquiry_jsp.java:1088)
>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
>>>>>(StudentEnquiry_jsp.java:1062)
>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
>>>>>(StudentEnquiry_jsp.java:1028)
>>>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
>>>>>(StudentEnquiry_jsp.java:258)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>My validation.xml (very simple one):
>>>>>
>>>>><!DOCTYPE form-validation PUBLIC
>>>>>"-//Apache Software Foundation//DTD Commons Validator Rules
>>>>>Configuration 1.0//EN"
>>>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
>>>>>
>>>>>
>>>>><form-validation>
>>>>><formset>
>>>>><form name="studentEnquiryForm">
>>>>><field property="studentEnquiry.firstName" depends="required">
>>>>><arg0 key=" firstName.mandatory"/>
>>>>></field>
>>>>></form>
>>>>></formset>
>>>>></form-validation>
>>>>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 


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


Re: Validator framework hijacks requests! :(

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Thanks Laurie for the suggestion.
 >>>> Then set the 'input' attribute for your validating actions to point to
the pre-population action >>>> (so when validation fails, Struts forwards to
preCreate, not directly to the JSP).
 That explains why the request variables are getting wiped off! :-) I
realize I am pointing directly to the JSP page. I changed it now to point to
preCreate.
  However, I have only one action class for all these operations. I just
have various operations/functions inside that action class to handle them. I
use the dispatch action servlet and not the action servlet and preCreate,
create etc are various parameterized function calls on this dispacth action
class.
 How would you achieve setting false and true on validations based on each
operation in dispatch action?
 I am posting some relevant portions of my struts-config.xml. The minute I
changed validate="true", I am getting an exception. And I think I can
explain it. It is validating before the user inputs anything. Naturally it
fails. Then it redirects to the same "input" page. Again fails validation...
its just going into an endless loop. :(
 Please suggest whats the best way to work around this?

<form-bean name="studentEnquiryForm" type="
org.apache.struts.validator.DynaValidatorForm">
<form-property name="studentEnquiry" type="
com.tuningfork.student.businessobject.enquiry.StudentEnquiry "/>
<form-property name="contactAddress" type="
com.tuningfork.student.businessobject.enquiry.StudentAddress"/>
<form-property name="permanentAddress" type="
com.tuningfork.student.businessobject.enquiry.StudentAddress "/>
<form-property name="educationDetails" type="
com.tuningfork.student.businessobject.enquiry.StudentEducationDetail[]"
size="4"/>
<form-property name="workExperience" type="
com.tuningfork.student.businessobject.enquiry.StudentWorkExperience"/>
<form-property name="enquiryCentreId" type="java.lang.Integer"/>
<form-property name="enquiryCourseId" type=" java.lang.Integer"/>
<form-property name="studentEnquiryId" type="java.lang.Integer"/>
<form-property name="newsPaperIds" type="int[]"/>
<form-property name="discoverySourceIds" type="int[]"/>
<form-property name="centreTimePreferences" type="
com.tuningfork.student.businessobject.enquiry.StudentCentreTimePreference[]"
size="3"/>

<form-property name="studentEnquiryFilter" type="
com.tuningfork.student.businessobject.enquiry.StudentEnquiryFilter"/>
</form-bean>

  <action attribute="studentEnquiryForm" name="studentEnquiryForm"
path="/StudentEnquiry" scope="request"
validate="false" type="com.tuningfork.student.action.StudentEnquiryAction"
parameter="operation" input="/StudentEnquiry.do?operation=preCreate">
<forward name="preCreateSuccess"
path="/student/StudentEnquiry.jsp?nextOperation=create"/>
<forward name="preUpdateSuccess"
path="/student/StudentEnquiry.jsp?nextOperation=update"/>

<forward name="viewSuccess" path="/student/StudentEnquiry.jsp"/>
<forward name="createSuccess" path="home"/>

<forward name="initFilterForUpdateSuccess"
path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
<forward name="prepareListForUpdateSuccess"
path="/student/StudentSearch.jsp?nextOperation=prepareListForUpdate"/>
<forward name="updateSuccess"
path="/student/StudentEnquiry.jsp?nextOperation=update"/>

</action>


 On 11/13/05, Laurie Harper <la...@holoweb.net> wrote:
>
> The trick is to only include validation on the data processing actions,
> not on the pre-display actions ( i.e. use validate="false" on your
> preCreate action mapping, and only put validate="true" on the action you
> submit the form to). Then set the 'input' attribute for your validating
> actions to point to the pre-population action (so when validation fails,
> Struts forwards to preCreate, not directly to the JSP).
>
> You don't need to use session scope for anything if you don't want to,
> you just have to make sure that you always display your JSP via your
> preCreate action.
>
> If that doesn't make sense, post your action mappings from
> struts-config.xml so we can see how you have things setup.
>
> L.
>
> Raghu Kanchustambham wrote:
> > I think I can explain it now.
> > I hit the action servlet first invoking preCreate function. This
> function
> > populates various lists of beans needed for dropdowns and put these
> lists in
> > the request object and forward to a JSP. The JSP reads these lists and
> > displays the dropdowns. So far so good!
> > preCreate --->request object populated with lists ---> JSP reads from
> > request for dropdown lists
> > Now... enter the Validation framework! I think it is hijacking this
> series!
> >
> > preCreate ---> request populated with lists ---> Validator framework
> --->
> > JSP
> > Now the jump from Validator framework to JSP means that all request
> scope
> > objects (the lists) are lost! :(
> > How should I architect ? Should I make these lists session scope? I
> somehow
> > dont like to make them session scope, because they are really request
> scope!
> >
> > Can someone comment on my explanation / help me with a solution ??
> > Thanks much.
> > Regards,
> > Raghu
> >
> >
> > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >
> >>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> >>Martin-
> >>----- Original Message -----
> >>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>Sent: Saturday, November 12, 2005 10:37 AM
> >>Subject: Re: Fw: Validator framework introduces errors
> >>
> >>
> >>Hi Martin,
> >>I do something like:
> >>request.setAttribute("centreList",DataAccessManager.getCentres());
> >>before invoking the jsp.
> >>The strange part is, the minute i remove validation.xml from the
> validator
> >>path, effectively removing the validation framework, every thing works
> >>just
> >>fine! Just cant explain it ! :(
> >>Thanks again in advance to anyone who can explain this!
> >>Please find the StudentEnquiry.jsp attached.
> >>----------------------------------------
> >>
> >><%@ page import="
> >>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail"%>
> >><%@ page language="java" %>
> >><%@ taglib uri="/WEB-INF/struts- bean.tld" prefix="bean" %>
> >><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> >><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> >><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> >><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >>
> >><layout:html>
> >><head>
> >><title>Student Enquiry</title>
> >>
> >><link rel="stylesheet" type="text/css" href="../mystyle.css" />
> >><SCRIPT>function set(target) { document.forms
> >>[0].operation.value=target;}</SCRIPT>
> >></head>
> >><body>
> >><h2>Student Enquiry</h2>
> >><html:errors/>
> >><c:set var="operationVar">
> >><%= request.getParameter("nextOperation")%>
> >></c:set>
> >>
> >><c:set var="readOnlyForm"> false </c:set>
> >>
> >><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> >>doesnt
> >>have a Next operation -->
> >><c:set var="readOnlyForm"> true </c:set>
> >></c:if>
> >><html:form action="StudentEnquiry.do"
> >>onsubmit="validateStudentEnquiryForm(this);">
> >><input type="hidden" name="operation"
> >>value="<%=request.getParameter("nextOperation")%>"
> >>/>
> >><table width="100%">
> >><tr>
> >><td rowspan="2">
> >><%@include file="StudentDemographics.jsp"%>
> >></td>
> >><td>
> >><layout:grid cols="2">
> >><layout:select property="enquiryCentreId" size="${selectBoxSize}"
> >>key="Enquiry Centre">
> >><layout:options collection ="centreList" property="id" labelName="name"
> />
> >></layout:select>
> >><layout:select property="enquiryCourseId" size="${selectBoxSize}"
> >>key="Enquiry Course">
> >><layout:optionsCollection name="courseList" value="id" label="name"/>
> >></layout:select>
> >></layout:grid>
> >>
> >></td>
> >></tr>
> >>
> >>
> >><tr>
> >><td>
> >></td>
> >><td align="center">
> >><html:submit>${operationVar} </html:submit>
> >><html:cancel>cancel</html:cancel>
> >></td>
> >></tr>
> >>
> >></table>
> >>
> >>
> >></html:form>
> >>
> >></body>
> >></layout:html>
> >>------------------------------------------------
> >>
> >>
> >>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >>
> >>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
> >>
> >>centreList
> >>
> >>>bean?
> >>>I also dont see the code for centreList bean?
> >>>
> >>>Martin-
> >>>
> >>>----- Original Message -----
> >>>From: "Raghu Kanchustambham" <kr...@gmail.com>
> >>>To: "Struts Users Mailing List" < user@struts.apache.org>
> >>>Sent: Saturday, November 12, 2005 9:40 AM
> >>>Subject: Validator framework introduces errors
> >>>
> >>>
> >>>Hi,
> >>>The minute I introduced Validator framework in my application .....
> >>>it started giving me the following error when I accessed the JSP ....
> >>>centreList is used as a parameter for the dropdown. The minute I remove
>
> >>>the
> >>>validation.xml from the path... the application runs fine again! :(
> >>>very strange and i am not able to explain this behavior .. can someone
> >>>help?
> >>>Thanks much in advance.
> >>>Regards,
> >>>Raghu
> >>>
> >>>javax.servlet.jsp.JspException: Cannot find bean centreList in any
> scope
> >>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java :938)
> >>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
> >>>OptionsCollectionTag.java:115)
> >>>
> >>>
> >>
> >>
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> >>
> >>>(StudentEnquiry_jsp.java:1088)
> >>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> >>>(StudentEnquiry_jsp.java:1062)
> >>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> >>>(StudentEnquiry_jsp.java:1028)
> >>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
> >>>(StudentEnquiry_jsp.java:258)
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>My validation.xml (very simple one):
> >>>
> >>><!DOCTYPE form-validation PUBLIC
> >>>"-//Apache Software Foundation//DTD Commons Validator Rules
> >>>Configuration 1.0//EN"
> >>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> >>>
> >>>
> >>><form-validation>
> >>><formset>
> >>><form name="studentEnquiryForm">
> >>><field property="studentEnquiry.firstName" depends="required">
> >>><arg0 key=" firstName.mandatory"/>
> >>></field>
> >>></form>
> >>></formset>
> >>></form-validation>
> >>>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Validator framework hijacks requests! :(

Posted by Laurie Harper <la...@holoweb.net>.
The trick is to only include validation on the data processing actions, 
not on the pre-display actions (i.e. use validate="false" on your 
preCreate action mapping, and only put validate="true" on the action you 
submit the form to). Then set the 'input' attribute for your validating 
actions to point to the pre-population action (so when validation fails, 
Struts forwards to preCreate, not directly to the JSP).

You don't need to use session scope for anything if you don't want to, 
you just have to make sure that you always display your JSP via your 
preCreate action.

If that doesn't make sense, post your action mappings from 
struts-config.xml so we can see how you have things setup.

L.

Raghu Kanchustambham wrote:
> I think I can explain it now.
>  I hit the action servlet first invoking preCreate function. This function
> populates various lists of beans needed for dropdowns and put these lists in
> the request object and forward to a JSP. The JSP reads these lists and
> displays the dropdowns. So far so good!
>  preCreate --->request object populated with lists ---> JSP reads from
> request for dropdown lists
>  Now... enter the Validation framework! I think it is hijacking this series!
> 
>  preCreate ---> request populated with lists ---> Validator framework --->
> JSP
>  Now the jump from Validator framework to JSP means that all request scope
> objects (the lists) are lost! :(
>  How should I architect ? Should I make these lists session scope? I somehow
> dont like to make them session scope, because they are really request scope!
> 
>  Can someone comment on my explanation / help me with a solution ??
>   Thanks much.
> Regards,
> Raghu
> 
> 
>  On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> 
>>I didnt see the contents E.G. <tag> </tag> for your c.tld ??
>>Martin-
>>----- Original Message -----
>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>To: "Struts Users Mailing List" <us...@struts.apache.org>
>>Sent: Saturday, November 12, 2005 10:37 AM
>>Subject: Re: Fw: Validator framework introduces errors
>>
>>
>>Hi Martin,
>>I do something like:
>>request.setAttribute("centreList",DataAccessManager.getCentres());
>>before invoking the jsp.
>>The strange part is, the minute i remove validation.xml from the validator
>>path, effectively removing the validation framework, every thing works
>>just
>>fine! Just cant explain it ! :(
>>Thanks again in advance to anyone who can explain this!
>>Please find the StudentEnquiry.jsp attached.
>>----------------------------------------
>>
>><%@ page import="
>>com.tuningfork.student.businessobject.enquiry.StudentEducationDetail"%>
>><%@ page language="java" %>
>><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
>><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
>><%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
>><%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
>>
>><layout:html>
>><head>
>><title>Student Enquiry</title>
>>
>><link rel="stylesheet" type="text/css" href="../mystyle.css" />
>><SCRIPT>function set(target) {document.forms
>>[0].operation.value=target;}</SCRIPT>
>></head>
>><body>
>><h2>Student Enquiry</h2>
>><html:errors/>
>><c:set var="operationVar">
>><%= request.getParameter("nextOperation")%>
>></c:set>
>>
>><c:set var="readOnlyForm"> false </c:set>
>>
>><c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
>>doesnt
>>have a Next operation -->
>><c:set var="readOnlyForm"> true </c:set>
>></c:if>
>><html:form action="StudentEnquiry.do"
>>onsubmit="validateStudentEnquiryForm(this);">
>><input type="hidden" name="operation"
>>value="<%=request.getParameter("nextOperation")%>"
>>/>
>><table width="100%">
>><tr>
>><td rowspan="2">
>><%@include file="StudentDemographics.jsp"%>
>></td>
>><td>
>><layout:grid cols="2">
>><layout:select property="enquiryCentreId" size="${selectBoxSize}"
>>key="Enquiry Centre">
>><layout:options collection ="centreList" property="id" labelName="name" />
>></layout:select>
>><layout:select property="enquiryCourseId" size="${selectBoxSize}"
>>key="Enquiry Course">
>><layout:optionsCollection name="courseList" value="id" label="name"/>
>></layout:select>
>></layout:grid>
>>
>></td>
>></tr>
>>
>>
>><tr>
>><td>
>></td>
>><td align="center">
>><html:submit>${operationVar} </html:submit>
>><html:cancel>cancel</html:cancel>
>></td>
>></tr>
>>
>></table>
>>
>>
>></html:form>
>>
>></body>
>></layout:html>
>>------------------------------------------------
>>
>>
>>On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
>>
>>>I did'nt see the (StudentEnquiry.jsp) jsp page which references
>>
>>centreList
>>
>>>bean?
>>>I also dont see the code for centreList bean?
>>>
>>>Martin-
>>>
>>>----- Original Message -----
>>>From: "Raghu Kanchustambham" <kr...@gmail.com>
>>>To: "Struts Users Mailing List" <us...@struts.apache.org>
>>>Sent: Saturday, November 12, 2005 9:40 AM
>>>Subject: Validator framework introduces errors
>>>
>>>
>>>Hi,
>>>The minute I introduced Validator framework in my application .....
>>>it started giving me the following error when I accessed the JSP ....
>>>centreList is used as a parameter for the dropdown. The minute I remove
>>>the
>>>validation.xml from the path... the application runs fine again! :(
>>>very strange and i am not able to explain this behavior .. can someone
>>>help?
>>>Thanks much in advance.
>>>Regards,
>>>Raghu
>>>
>>>javax.servlet.jsp.JspException: Cannot find bean centreList in any scope
>>>org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
>>>fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
>>>OptionsCollectionTag.java:115)
>>>
>>>
>>
>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
>>
>>>(StudentEnquiry_jsp.java:1088)
>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
>>>(StudentEnquiry_jsp.java:1062)
>>>org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
>>>(StudentEnquiry_jsp.java:1028)
>>>org.apache.jsp.student.StudentEnquiry_jsp._jspService
>>>(StudentEnquiry_jsp.java:258)
>>>
>>>
>>>
>>>
>>>
>>>My validation.xml (very simple one):
>>>
>>><!DOCTYPE form-validation PUBLIC
>>>"-//Apache Software Foundation//DTD Commons Validator Rules
>>>Configuration 1.0//EN"
>>>"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
>>>
>>>
>>><form-validation>
>>><formset>
>>><form name="studentEnquiryForm">
>>><field property="studentEnquiry.firstName" depends="required">
>>><arg0 key="firstName.mandatory"/>
>>></field>
>>></form>
>>></formset>
>>></form-validation>
>>>
> 


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


Re: Validator framework hijacks requests! :(

Posted by Paul Benedict <pa...@yahoo.com>.
What is preCreate? Is that a method you have? Know that the validator will not call your action if
a validation error has occured.

--- Raghu Kanchustambham <kr...@gmail.com> wrote:

> Thanks.. may be i will do it as a last option.
> But is my explanation correct? I am new to Validation framework .. just
> started using it for the last 2 days .. and struts as such for just over a
> month. So want someone's opinion on my explanation of why "state" is being
> lost!
>  thanks
> raghu
> 
> 
>  On 11/12/05, Paul Benedict <pa...@yahoo.com> wrote:
> >
> > There's nothing wrong with ussing session scoped forms. You can attached
> > these lists right to the
> > form, if you want - just make sure you remove the form from memory when
> > you're finished.
> >
> > --- Raghu Kanchustambham <kr...@gmail.com> wrote:
> >
> > > I think I can explain it now.
> > > I hit the action servlet first invoking preCreate function. This
> > function
> > > populates various lists of beans needed for dropdowns and put these
> > lists in
> > > the request object and forward to a JSP. The JSP reads these lists and
> > > displays the dropdowns. So far so good!
> > > preCreate --->request object populated with lists ---> JSP reads from
> > > request for dropdown lists
> > > Now... enter the Validation framework! I think it is hijacking this
> > series!
> > >
> > > preCreate ---> request populated with lists ---> Validator framework
> > --->
> > > JSP
> > > Now the jump from Validator framework to JSP means that all request
> > scope
> > > objects (the lists) are lost! :(
> > > How should I architect ? Should I make these lists session scope? I
> > somehow
> > > dont like to make them session scope, because they are really request
> > scope!
> > >
> > > Can someone comment on my explanation / help me with a solution ??
> > > Thanks much.
> > > Regards,
> > > Raghu
> > >
> > >
> > > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> > > >
> > > > I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> > > > Martin-
> > > > ----- Original Message -----
> > > > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > > > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > > > Sent: Saturday, November 12, 2005 10:37 AM
> > > > Subject: Re: Fw: Validator framework introduces errors
> > > >
> > > >
> > > > Hi Martin,
> > > > I do something like:
> > > > request.setAttribute("centreList",DataAccessManager.getCentres());
> > > > before invoking the jsp.
> > > > The strange part is, the minute i remove validation.xml from the
> > validator
> > > > path, effectively removing the validation framework, every thing works
> > > > just
> > > > fine! Just cant explain it ! :(
> > > > Thanks again in advance to anyone who can explain this!
> > > > Please find the StudentEnquiry.jsp attached.
> > > > ----------------------------------------
> > > >
> > > > <%@ page import="
> > > > com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> > "%>
> > > > <%@ page language="java" %>
> > > > <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> > > > <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> > > > <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> > > > <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> > > > <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> > > >
> > > > <layout:html>
> > > > <head>
> > > > <title>Student Enquiry</title>
> > > >
> > > > <link rel="stylesheet" type="text/css" href="../mystyle.css" />
> > > > <SCRIPT>function set(target) {document.forms
> > > > [0].operation.value=target;}</SCRIPT>
> > > > </head>
> > > > <body>
> > > > <h2>Student Enquiry</h2>
> > > > <html:errors/>
> > > > <c:set var="operationVar">
> > > > <%= request.getParameter("nextOperation")%>
> > > > </c:set>
> > > >
> > > > <c:set var="readOnlyForm"> false </c:set>
> > > >
> > > > <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> > > > doesnt
> > > > have a Next operation -->
> > > > <c:set var="readOnlyForm"> true </c:set>
> > > > </c:if>
> > > > <html:form action="StudentEnquiry.do"
> > > > onsubmit="validateStudentEnquiryForm(this);">
> > > > <input type="hidden" name="operation"
> > > > value="<%=request.getParameter("nextOperation")%>"
> > > > />
> > > > <table width="100%">
> > > > <tr>
> > > > <td rowspan="2">
> > > > <%@include file="StudentDemographics.jsp"%>
> > > > </td>
> > > > <td>
> > > > <layout:grid cols="2">
> > > > <layout:select property="enquiryCentreId" size="${selectBoxSize}"
> > > > key="Enquiry Centre">
> > > > <layout:options collection ="centreList" property="id"
> > labelName="name" />
> > > > </layout:select>
> > > > <layout:select property="enquiryCourseId" size="${selectBoxSize}"
> > > > key="Enquiry Course">
> > > > <layout:optionsCollection name="courseList" value="id" label="name"/>
> > > > </layout:select>
> > > > </layout:grid>
> > > >
> > > > </td>
> > > > </tr>
> > > >
> > > >
> > > > <tr>
> > > > <td>
> > > > </td>
> > > > <td align="center">
> > > > <html:submit>${operationVar} </html:submit>
> > > > <html:cancel>cancel</html:cancel>
> > > > </td>
> > > > </tr>
> > > >
> > > > </table>
> > > >
> > > >
> > > > </html:form>
> > > >
> > > > </body>
> > > > </layout:html>
> > > > ------------------------------------------------
> > > >
> > > >
> > > > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> > > > >
> > > > > I did'nt see the (StudentEnquiry.jsp) jsp page which references
> > > > centreList
> > > > > bean?
> > > > > I also dont see the code for centreList bean?
> > > > >
> > > > > Martin-
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > > > > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > > > > Sent: Saturday, November 12, 2005 9:40 AM
> > > > > Subject: Validator framework introduces errors
> > > > >
> > > > >
> > > > > Hi,
> > > > > The minute I introduced Validator framework in my application .....
> > > > > it started giving me the following error when I accessed the JSP
> > ....
> > > > > centreList is used as a parameter for the dropdown. The minute I
> > remove
> > > > > the
> > > > > validation.xml from the path... the application runs fine again! :(
> > > > > very strange and i am not able to explain this behavior .. can
> > someone
> > > > > help?
> > > > > Thanks much in advance.
> > > > > Regards,
> > > > > Raghu
> > > > >
> > > > > javax.servlet.jsp.JspException: Cannot find bean centreList in any
> > scope
> > > > > org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
> > > > >
> > fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
> > > > > OptionsCollectionTag.java:115)
> > > > >
> > > > >
> > > >
> > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> > > > > (StudentEnquiry_jsp.java:1088)
> > > > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> > > > > (StudentEnquiry_jsp.java:1062)
> > > > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> > > > > (StudentEnquiry_jsp.java:1028)
> > > > > org.apache.jsp.student.StudentEnquiry_jsp._jspService
> > > > > (StudentEnquiry_jsp.java:258)
> > > > >
> > > > >
> > > > >
> > > > >
> 
=== message truncated ===



		
__________________________________ 
Yahoo! FareChase: Search multiple travel sites in one click.
http://farechase.yahoo.com

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


Re: Validator framework hijacks requests! :(

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Thanks.. may be i will do it as a last option.
But is my explanation correct? I am new to Validation framework .. just
started using it for the last 2 days .. and struts as such for just over a
month. So want someone's opinion on my explanation of why "state" is being
lost!
 thanks
raghu


 On 11/12/05, Paul Benedict <pa...@yahoo.com> wrote:
>
> There's nothing wrong with ussing session scoped forms. You can attached
> these lists right to the
> form, if you want - just make sure you remove the form from memory when
> you're finished.
>
> --- Raghu Kanchustambham <kr...@gmail.com> wrote:
>
> > I think I can explain it now.
> > I hit the action servlet first invoking preCreate function. This
> function
> > populates various lists of beans needed for dropdowns and put these
> lists in
> > the request object and forward to a JSP. The JSP reads these lists and
> > displays the dropdowns. So far so good!
> > preCreate --->request object populated with lists ---> JSP reads from
> > request for dropdown lists
> > Now... enter the Validation framework! I think it is hijacking this
> series!
> >
> > preCreate ---> request populated with lists ---> Validator framework
> --->
> > JSP
> > Now the jump from Validator framework to JSP means that all request
> scope
> > objects (the lists) are lost! :(
> > How should I architect ? Should I make these lists session scope? I
> somehow
> > dont like to make them session scope, because they are really request
> scope!
> >
> > Can someone comment on my explanation / help me with a solution ??
> > Thanks much.
> > Regards,
> > Raghu
> >
> >
> > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> > >
> > > I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> > > Martin-
> > > ----- Original Message -----
> > > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > > Sent: Saturday, November 12, 2005 10:37 AM
> > > Subject: Re: Fw: Validator framework introduces errors
> > >
> > >
> > > Hi Martin,
> > > I do something like:
> > > request.setAttribute("centreList",DataAccessManager.getCentres());
> > > before invoking the jsp.
> > > The strange part is, the minute i remove validation.xml from the
> validator
> > > path, effectively removing the validation framework, every thing works
> > > just
> > > fine! Just cant explain it ! :(
> > > Thanks again in advance to anyone who can explain this!
> > > Please find the StudentEnquiry.jsp attached.
> > > ----------------------------------------
> > >
> > > <%@ page import="
> > > com.tuningfork.student.businessobject.enquiry.StudentEducationDetail
> "%>
> > > <%@ page language="java" %>
> > > <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> > > <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> > > <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> > > <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> > > <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> > >
> > > <layout:html>
> > > <head>
> > > <title>Student Enquiry</title>
> > >
> > > <link rel="stylesheet" type="text/css" href="../mystyle.css" />
> > > <SCRIPT>function set(target) {document.forms
> > > [0].operation.value=target;}</SCRIPT>
> > > </head>
> > > <body>
> > > <h2>Student Enquiry</h2>
> > > <html:errors/>
> > > <c:set var="operationVar">
> > > <%= request.getParameter("nextOperation")%>
> > > </c:set>
> > >
> > > <c:set var="readOnlyForm"> false </c:set>
> > >
> > > <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> > > doesnt
> > > have a Next operation -->
> > > <c:set var="readOnlyForm"> true </c:set>
> > > </c:if>
> > > <html:form action="StudentEnquiry.do"
> > > onsubmit="validateStudentEnquiryForm(this);">
> > > <input type="hidden" name="operation"
> > > value="<%=request.getParameter("nextOperation")%>"
> > > />
> > > <table width="100%">
> > > <tr>
> > > <td rowspan="2">
> > > <%@include file="StudentDemographics.jsp"%>
> > > </td>
> > > <td>
> > > <layout:grid cols="2">
> > > <layout:select property="enquiryCentreId" size="${selectBoxSize}"
> > > key="Enquiry Centre">
> > > <layout:options collection ="centreList" property="id"
> labelName="name" />
> > > </layout:select>
> > > <layout:select property="enquiryCourseId" size="${selectBoxSize}"
> > > key="Enquiry Course">
> > > <layout:optionsCollection name="courseList" value="id" label="name"/>
> > > </layout:select>
> > > </layout:grid>
> > >
> > > </td>
> > > </tr>
> > >
> > >
> > > <tr>
> > > <td>
> > > </td>
> > > <td align="center">
> > > <html:submit>${operationVar} </html:submit>
> > > <html:cancel>cancel</html:cancel>
> > > </td>
> > > </tr>
> > >
> > > </table>
> > >
> > >
> > > </html:form>
> > >
> > > </body>
> > > </layout:html>
> > > ------------------------------------------------
> > >
> > >
> > > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> > > >
> > > > I did'nt see the (StudentEnquiry.jsp) jsp page which references
> > > centreList
> > > > bean?
> > > > I also dont see the code for centreList bean?
> > > >
> > > > Martin-
> > > >
> > > > ----- Original Message -----
> > > > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > > > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > > > Sent: Saturday, November 12, 2005 9:40 AM
> > > > Subject: Validator framework introduces errors
> > > >
> > > >
> > > > Hi,
> > > > The minute I introduced Validator framework in my application .....
> > > > it started giving me the following error when I accessed the JSP
> ....
> > > > centreList is used as a parameter for the dropdown. The minute I
> remove
> > > > the
> > > > validation.xml from the path... the application runs fine again! :(
> > > > very strange and i am not able to explain this behavior .. can
> someone
> > > > help?
> > > > Thanks much in advance.
> > > > Regards,
> > > > Raghu
> > > >
> > > > javax.servlet.jsp.JspException: Cannot find bean centreList in any
> scope
> > > > org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
> > > >
> fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
> > > > OptionsCollectionTag.java:115)
> > > >
> > > >
> > >
> org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> > > > (StudentEnquiry_jsp.java:1088)
> > > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> > > > (StudentEnquiry_jsp.java:1062)
> > > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> > > > (StudentEnquiry_jsp.java:1028)
> > > > org.apache.jsp.student.StudentEnquiry_jsp._jspService
> > > > (StudentEnquiry_jsp.java:258)
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > My validation.xml (very simple one):
> > > >
> > > > <!DOCTYPE form-validation PUBLIC
> > > > "-//Apache Software Foundation//DTD Commons Validator Rules
> > > > Configuration 1.0//EN"
> > > > "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> > > >
> > > >
> > > > <form-validation>
> > > > <formset>
> > > > <form name="studentEnquiryForm">
> > > > <field property="studentEnquiry.firstName" depends="required">
> > > > <arg0 key="firstName.mandatory"/>
> > > > </field>
> > > > </form>
> > > > </formset>
> > > > </form-validation>
> > > >
> > >
> >
>
>
>
>
> __________________________________
> Yahoo! FareChase: Search multiple travel sites in one click.
> http://farechase.yahoo.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Validator framework hijacks requests! :(

Posted by Paul Benedict <pa...@yahoo.com>.
There's nothing wrong with ussing session scoped forms. You can attached these lists right to the
form, if you want - just make sure you remove the form from memory when you're finished.

--- Raghu Kanchustambham <kr...@gmail.com> wrote:

> I think I can explain it now.
>  I hit the action servlet first invoking preCreate function. This function
> populates various lists of beans needed for dropdowns and put these lists in
> the request object and forward to a JSP. The JSP reads these lists and
> displays the dropdowns. So far so good!
>  preCreate --->request object populated with lists ---> JSP reads from
> request for dropdown lists
>  Now... enter the Validation framework! I think it is hijacking this series!
> 
>  preCreate ---> request populated with lists ---> Validator framework --->
> JSP
>  Now the jump from Validator framework to JSP means that all request scope
> objects (the lists) are lost! :(
>  How should I architect ? Should I make these lists session scope? I somehow
> dont like to make them session scope, because they are really request scope!
> 
>  Can someone comment on my explanation / help me with a solution ??
>   Thanks much.
> Regards,
> Raghu
> 
> 
>  On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> >
> > I didnt see the contents E.G. <tag> </tag> for your c.tld ??
> > Martin-
> > ----- Original Message -----
> > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > Sent: Saturday, November 12, 2005 10:37 AM
> > Subject: Re: Fw: Validator framework introduces errors
> >
> >
> > Hi Martin,
> > I do something like:
> > request.setAttribute("centreList",DataAccessManager.getCentres());
> > before invoking the jsp.
> > The strange part is, the minute i remove validation.xml from the validator
> > path, effectively removing the validation framework, every thing works
> > just
> > fine! Just cant explain it ! :(
> > Thanks again in advance to anyone who can explain this!
> > Please find the StudentEnquiry.jsp attached.
> > ----------------------------------------
> >
> > <%@ page import="
> > com.tuningfork.student.businessobject.enquiry.StudentEducationDetail"%>
> > <%@ page language="java" %>
> > <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
> > <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
> > <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
> > <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
> > <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
> >
> > <layout:html>
> > <head>
> > <title>Student Enquiry</title>
> >
> > <link rel="stylesheet" type="text/css" href="../mystyle.css" />
> > <SCRIPT>function set(target) {document.forms
> > [0].operation.value=target;}</SCRIPT>
> > </head>
> > <body>
> > <h2>Student Enquiry</h2>
> > <html:errors/>
> > <c:set var="operationVar">
> > <%= request.getParameter("nextOperation")%>
> > </c:set>
> >
> > <c:set var="readOnlyForm"> false </c:set>
> >
> > <c:if test="${operationVar=='null' || operationVar=='ok'}"> <!-- view
> > doesnt
> > have a Next operation -->
> > <c:set var="readOnlyForm"> true </c:set>
> > </c:if>
> > <html:form action="StudentEnquiry.do"
> > onsubmit="validateStudentEnquiryForm(this);">
> > <input type="hidden" name="operation"
> > value="<%=request.getParameter("nextOperation")%>"
> > />
> > <table width="100%">
> > <tr>
> > <td rowspan="2">
> > <%@include file="StudentDemographics.jsp"%>
> > </td>
> > <td>
> > <layout:grid cols="2">
> > <layout:select property="enquiryCentreId" size="${selectBoxSize}"
> > key="Enquiry Centre">
> > <layout:options collection ="centreList" property="id" labelName="name" />
> > </layout:select>
> > <layout:select property="enquiryCourseId" size="${selectBoxSize}"
> > key="Enquiry Course">
> > <layout:optionsCollection name="courseList" value="id" label="name"/>
> > </layout:select>
> > </layout:grid>
> >
> > </td>
> > </tr>
> >
> >
> > <tr>
> > <td>
> > </td>
> > <td align="center">
> > <html:submit>${operationVar} </html:submit>
> > <html:cancel>cancel</html:cancel>
> > </td>
> > </tr>
> >
> > </table>
> >
> >
> > </html:form>
> >
> > </body>
> > </layout:html>
> > ------------------------------------------------
> >
> >
> > On 11/12/05, Martin Gainty <mg...@hotmail.com> wrote:
> > >
> > > I did'nt see the (StudentEnquiry.jsp) jsp page which references
> > centreList
> > > bean?
> > > I also dont see the code for centreList bean?
> > >
> > > Martin-
> > >
> > > ----- Original Message -----
> > > From: "Raghu Kanchustambham" <kr...@gmail.com>
> > > To: "Struts Users Mailing List" <us...@struts.apache.org>
> > > Sent: Saturday, November 12, 2005 9:40 AM
> > > Subject: Validator framework introduces errors
> > >
> > >
> > > Hi,
> > > The minute I introduced Validator framework in my application .....
> > > it started giving me the following error when I accessed the JSP ....
> > > centreList is used as a parameter for the dropdown. The minute I remove
> > > the
> > > validation.xml from the path... the application runs fine again! :(
> > > very strange and i am not able to explain this behavior .. can someone
> > > help?
> > > Thanks much in advance.
> > > Regards,
> > > Raghu
> > >
> > > javax.servlet.jsp.JspException: Cannot find bean centreList in any scope
> > > org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)
> > > fr.improve.struts.taglib.layout.field.OptionsCollectionTag.doStartTag(
> > > OptionsCollectionTag.java:115)
> > >
> > >
> > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_optionsCollection_0
> > > (StudentEnquiry_jsp.java:1088)
> > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_select_2
> > > (StudentEnquiry_jsp.java:1062)
> > > org.apache.jsp.student.StudentEnquiry_jsp._jspx_meth_layout_grid_1
> > > (StudentEnquiry_jsp.java:1028)
> > > org.apache.jsp.student.StudentEnquiry_jsp._jspService
> > > (StudentEnquiry_jsp.java:258)
> > >
> > >
> > >
> > >
> > >
> > > My validation.xml (very simple one):
> > >
> > > <!DOCTYPE form-validation PUBLIC
> > > "-//Apache Software Foundation//DTD Commons Validator Rules
> > > Configuration 1.0//EN"
> > > "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
> > >
> > >
> > > <form-validation>
> > > <formset>
> > > <form name="studentEnquiryForm">
> > > <field property="studentEnquiry.firstName" depends="required">
> > > <arg0 key="firstName.mandatory"/>
> > > </field>
> > > </form>
> > > </formset>
> > > </form-validation>
> > >
> >
> 



		
__________________________________ 
Yahoo! FareChase: Search multiple travel sites in one click.
http://farechase.yahoo.com

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