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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote:
I didnt see the contents E.G. <tag> </tag> for your c.tld ??
Martin-
----- Original Message -----
From: "Raghu Kanchustambham" <[EMAIL PROTECTED]>
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">
<[EMAIL PROTECTED] 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 <[EMAIL PROTECTED]> 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" <[EMAIL PROTECTED]>
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]