aspose file tools*
The moose likes Struts and the fly likes Model driven validation Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Frameworks » Struts
Bookmark "Model driven validation" Watch "Model driven validation" New topic
Author

Model driven validation

Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

Hi,

I have an action that implements com.opensymphony.xwork2.ModelDriven and I cannot get it to accept a date input from date picker on my JSP. I cant figure out where the default validation runs from or what date format is expected. My bean, action and view are shown below.



=========================
Action
==========================

public class AddMember extends ActionSupport implements ModelDriven {

private static final long serialVersionUID = 1L;
Member member = new Member();

public Object getModel() {
// TODO Auto-generated method stub
return member;
}

public void setMember(Member m){
this.member = m;
}

public Member getMember(){
return this.member;
}

public String execute(){
try{
member = new MemberService().saveMember(member);
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
return ERROR;
}
}
}

=================
Model
=================
public class Member implements java.io.Serializable {

private Integer id;
private String firstName;
private String middleName;
private String lastName;
private Date dateOfBirth;
private Date dateOfMembership;

public Member() {
}

public Member(String firstName, String middleName, String lastName,
Date dateOfBirth, Date dateOfMembership) {
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.dateOfBirth = dateOfBirth;
this.dateOfMembership = dateOfMembership;
}

public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

public String getFirstName() {
return this.firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getMiddleName() {
return this.middleName;
}

public void setMiddleName(String middleName) {
this.middleName = middleName;
}

public String getLastName() {
return this.lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public Date getDateOfBirth() {
return this.dateOfBirth;
}

public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}

public Date getDateOfMembership() {
return this.dateOfMembership;
}

public void setDateOfMembership(Date dateOfMembership) {
this.dateOfMembership = dateOfMembership;
}

}


===============
view
================

<s:form action="addMember">
<s:textfield name="firstName" label="First Name" value="" />
<s:textfield name="middleName" label="Middle Name" value="" />
<s:textfield name="lastName" label="Last Name" value="" />
<sj:datepicker value="3-23-70" id="dateOfBirth" name="dateOfBirth"
displayFormat="m-dd-yy" label="Date of Birth" changeYear="true" yearRange="-100"/>
<sj:datepicker value="today" id="dateOfMembership"
name="dateOfMembership" displayFormat="m-dd-yy" changeYear="true" yearRange="-30"
label="Date Of Membership" />
<s:submit />

</s:form>






The form will never submit regarless of the date format I try on my date pickers. It comes back with an error saying "Invalid field value for field " for both date fields. Any help will be appreciated

Best,
Mlati
Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

I changed from ModelDriven action to a simple action as a work around and the dates picked are never submitted to my action. I'm now using xml validation, the validator things that the date fields are blank.
Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

Anybody here? When I use the date formate dd/mm/yy I dont get the "invalid data for field" error but my xml validation still thinks no dates were submitted. Also I have used "get" for my form method so I can see if the date is indeed getting submited and yes they are being submitted. However this is how the submitted dates look like

member.dateOfBirth=02%2F03%2F1977&member.dateOfMembership=04%2F01%2F2011

Any ideas whats going on with this date picker/validation.
Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

I managed to fix my error but...my action wont forward. I fixed it by ignoring any xml validation, the date picker accepts date format mm/dd/yy
pooja par
Ranch Hand

Joined: Feb 14, 2011
Posts: 31
Hi All,

I want to use datepicker in my app.


My JSP:


<!DOCTYPE link PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<%@taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>
<link rel="STYLESHEET" type="text/css" href="codebase/dhtmlx.css">
<script src="codebase/dhtmlx.js" type="text/javascript"></script>
<script src="JS/DateValidation.js" type="text/javascript"></script>

<sx:head />
<sj:head />
</head>

<div style="width=100%;" align="center" >
<div ><h2>Add Manager Interest</h2></div>


<s:form action="CreateManagerInterest" namespace="/" method="POST" theme="simple" name="ManagerInterestBean">

<table width="50%" >
<tr>
<td align="left"><s:label value= "Manager*:"/></td>
<td align="left">
<s:url id="managerslist" action="ManagersAutoCompleter" />
<sx:autocompleter name="mgrIntrstBean.manager" href="%{managerslist}" loadOnTextChange="true" loadMinimumCount="1"
cssClass="dhxlist_txt_textarea" dropdownHeight="150px" forceValidOption="true" required="true"/>
</td>
</tr>
<tr>
<td align="left"><s:label value= "Trader:"/></td>
<td align="left">
<s:url id="traderslist" action="TradersAutoCompleter" />
<sx:autocompleter name="mgrIntrstBean.trader" href="%{traderslist}" loadOnTextChange="true" loadMinimumCount="1"
cssClass="dhxlist_txt_textarea" dropdownHeight="150px" forceValidOption="true"/>
</td>
</tr>

<tr>
<td align="left"><s:label value= "Good Until:"/></td>
<td align="left">
<sj:datepicker name="mgrIntrstBean.expiry" displayFormat="MM/dd/yyyy"/>

</td>

</tr>

<tr>
<td align="center" colspan="2"><s:submit value="Submit" align="center" /></td>
</tr>

</table>
</s:form>

</div>
</body>
</html>

I downloaded the jar struts2-jquery-plugin-2.5.3.jar

when I run the app I get the below error

org.apache.jasper.JasperException: /interestInputScreen.jsp(162,8) The sj:datepicker tag declares that it accepts dynamic attributes but does not implement the required interface
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:802)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:865)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1763)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)


Please help me

Thanks


Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

pooja par wrote:Hi All,

I want to use datepicker in my app.


My JSP:


<!DOCTYPE link PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<%@taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>
<link rel="STYLESHEET" type="text/css" href="codebase/dhtmlx.css">
<script src="codebase/dhtmlx.js" type="text/javascript"></script>
<script src="JS/DateValidation.js" type="text/javascript"></script>

<sx:head />
<sj:head />
</head>

<div style="width=100%;" align="center" >
<div ><h2>Add Manager Interest</h2></div>


<s:form action="CreateManagerInterest" namespace="/" method="POST" theme="simple" name="ManagerInterestBean">

<table width="50%" >
<tr>
<td align="left"><s:label value= "Manager*:"/></td>
<td align="left">
<s:url id="managerslist" action="ManagersAutoCompleter" />
<sx:autocompleter name="mgrIntrstBean.manager" href="%{managerslist}" loadOnTextChange="true" loadMinimumCount="1"
cssClass="dhxlist_txt_textarea" dropdownHeight="150px" forceValidOption="true" required="true"/>
</td>
</tr>
<tr>
<td align="left"><s:label value= "Trader:"/></td>
<td align="left">
<s:url id="traderslist" action="TradersAutoCompleter" />
<sx:autocompleter name="mgrIntrstBean.trader" href="%{traderslist}" loadOnTextChange="true" loadMinimumCount="1"
cssClass="dhxlist_txt_textarea" dropdownHeight="150px" forceValidOption="true"/>
</td>
</tr>

<tr>
<td align="left"><s:label value= "Good Until:"/></td>
<td align="left">
<sj:datepicker name="mgrIntrstBean.expiry" displayFormat="MM/dd/yyyy"/>

</td>

</tr>

<tr>
<td align="center" colspan="2"><s:submit value="Submit" align="center" /></td>
</tr>

</table>
</s:form>

</div>
</body>
</html>

I downloaded the jar struts2-jquery-plugin-2.5.3.jar

when I run the app I get the below error

org.apache.jasper.JasperException: /interestInputScreen.jsp(162,8) The sj:datepicker tag declares that it accepts dynamic attributes but does not implement the required interface
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:802)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:865)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1763)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)


Please help me

Thanks






What struts version? With struts 2.2.2.1 all you need is <%@taglib prefix="sj" uri="/struts-jquery-tags"%>
Struts-dojo-tags are deprecated. The jar you downloaded is all you need besides the tag above. Try deleting

<%@ taglib prefix="sx" uri="/struts-dojo-tags"%> and see what happens.
pooja par
Ranch Hand

Joined: Feb 14, 2011
Posts: 31
HI Samson

Thank you for the reply.
I am using struts2-core-2.0.14.jar.
Do I need to update to struts 2.2.2.1 if I need to use jQuery date picker(ofcourse removing dojo tags)

Please suggest me.
pooja par
Ranch Hand

Joined: Feb 14, 2011
Posts: 31
HI Samson

After replacing the struts2-core-2.0.14.jar with struts2-core-2.2.1.1.jar in my project it shows warning messages for all s:form, stags)
is there anyting that I need to replace.
Please help me.
pooja par
Ranch Hand

Joined: Feb 14, 2011
Posts: 31
Hi Samson,

Thank you soooooo.. much for the reply.
Issue got resolved

Thanks
Samson Mlati
Ranch Hand

Joined: Feb 23, 2009
Posts: 41

pooja par wrote:Hi Samson,

Thank you soooooo.. much for the reply.
Issue got resolved

Thanks


Yay!
pooja par
Ranch Hand

Joined: Feb 14, 2011
Posts: 31
Hi Samson,

I need struts2 jquery autocompleter for JSON example.

I used below link as reference.. but that is not clear and also not wotking
I see

but nowhere "term is specified in ui-sj:autocompleter"

http://code.google.com/p/struts2-jquery/wiki/AutocompleterTag

Can you please help be in providing me a complete example
Nagesh Golem
Greenhorn

Joined: Dec 22, 2010
Posts: 7
Hi Pooja par,

i struck at same issue please help me with your solutions on this.

Issue : org.apache.jasper.JasperException: /login.jsp(31,11) The s:form tag declares that it accepts dynamic attributes but does not implement the required interface
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:802)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)

Thanks
Nag
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Model driven validation