Hello,
Equinox 1.7 'Struts, Spring, Hibernate' configuration.
I am trying to do some validation just like the lastname validation in
the userForm.jsp. (that one was broke out of the box also.). I cannot
figure this out, and would really like to get it working. But I cannot
get the userform one to work, nor can I get mine to work. I was hoping
someone may see a problem somewhere, or be able to understand the error.
Thanks,
A) The validator plug-in is defined in the struts-config.xml like so.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
B) I am only trying to validate that the lastname of my form is
required, so in validation.xml I have this between formset tags.
<form name="contactForm">
<field property="contact.lastName" depends="required">
<arg0 key="contact.lastName"/>
</field>
</form>
C) My action extends DispatchAction (copied from the userAction);
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (log.isDebugEnabled()) {
log.debug("entering 'save' method...");
}
ActionMessages errors = form.validate(mapping, request);
if (!errors.isEmpty()) {
saveErrors(request, errors);
return mapping.findForward("edit");
}
D) JSP page
<html:form action="/contactus.html?method=save">
<table class="detail">
<tr>
<th><label for="contact.firstName"><fmt:message
key="contact.firstName"/>:</label></th>
<td><html:text property="contact.firstName"
styleId="contact.firstName"/></td>
</tr>
<tr>
<th><label for="contact.lastName" class="required">* <fmt:message
key="contact.lastName"/>:</label></th>
<td>
<html:text property="contact.lastName"
styleId="contact.lastName"/>
<span class="fieldError"><html:errors
property="contact.lastName"/></span>
</td>
</tr>
Error From Tomcat log:
at java.lang.Thread.run(Unknown Source)
ERROR - DynaValidatorForm.validate(112) | No such validation method:
org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Objec
t, org.ap
ache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletReq
uest)
org.apache.commons.validator.ValidatorException: No such validation
method:
org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Objec
t,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages, javax.servlet.http.HttpSer
vletRequest)
at
org.apache.commons.validator.ValidatorAction.loadValidationMethod(Valida
torAction.java:603)
at
org.apache.commons.validator.ValidatorAction.executeValidationMethod(Val
idatorAction.java:533)
at
org.apache.commons.validator.Field.validateForRule(Field.java:766)
at org.apache.commons.validator.Field.validate(Field.java:846)
at org.apache.commons.validator.Form.validate(Form.java:290)
at
org.apache.commons.validator.Validator.validate(Validator.java:354)
at
org.apache.struts.validator.DynaValidatorForm.validate(DynaValidatorForm
.java:110)
at
com.mb.purcell.action.ContactAction.save(ContactAction.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.j
ava:270)
at
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187
)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:431)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
236)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:173)
at
org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFi
lter.java:125)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:173)
at
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.
java:118)
at
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.j
ava:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:173)
at org.appfuse.web.MessageFilter.doFilter(MessageFilter.java:32)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:1
48)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:86
9)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.proc
essConnection(Http11BaseProtocol.java:664)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint
.java:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollow
erWorkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:684)
at java.lang.Thread.run(Unknown Source)