I am using the datetimepicker on a form with client-side validation
enabled.  
Form submissions with a blank datetime field should result in validation

being run against that field.  This is not the case -- this field is
only
validated on the server.  No other form field uses the dojo, and they
are all
validated on the client-sided correctly.  What do I have to do so the 
datetimepicker field receives client-sided validation like the other
fields?  
(I'm using struts 2.1.2 with xwork 2.1.1)

Thanks in advance,
-dave



=======================================================================
=======================================================================
==THE struts.xml:

<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd";>

<struts>  
  <include file="struts-default.xml"/>  
  <constant name="struts.action.extension" value="action" />
  <constant name="struts.devMode" value="true" />
  <constant name="struts.multipart.maxSize" value="2097152" />
  <constant name="struts.configuration.xml.reload" value="true" />
  
  <package name="siterequest" 
           namespace="/admin/siterequest"
           extends="struts-default">
    <default-interceptor-ref name="defaultStack"/>
    <action name="save" 
       method="save" 
       class="siterequest.SiteRequestAction">
      <result>/admin/siterequest/request_form_thanks.jsp</result>
      <result name="input">/admin/siterequest/request_form.jsp</result>
      <result
name="failure">/admin/siterequest/request_form.jsp</result>
    </action>
  </package>

</struts>



=======================================================================
=======================================================================
==THE SiteRequestAction-save-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" 
 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd";>
<validators>
  <field name="siteRequest.isid">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Submitter ISID" is required</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="maxLength">8</param>
      <message>"Submitter ISID" must be 8 characters or less</message>
    </field-validator>
  </field>
  <field name="siteRequest.businessArea">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Business Area" is required</message>
    </field-validator>
  </field>
  <field name="siteRequest.projectTitle">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Project Title" is required</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="maxLength">200</param>
      <message>"Project Title" must be 200 characters or less</message>
    </field-validator>
  </field>
  <field name="siteRequest.description">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Description" is required</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="maxLength">2000</param>
      <message>"Description" must be 2000 characters or less</message>
    </field-validator>
  </field>
  <field name="siteRequest.siteName">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Site Name" is required</message>
    </field-validator>
    <field-validator type="stringlength">
      <param name="maxLength">200</param>
      <message>"Site Name" must be 200 characters or less</message>
    </field-validator>
  </field>
  <field name="siteRequest.issueType">
    <field-validator type="requiredstring">
      <param name="trim">true</param>
      <message>"Issue Type" is required</message>
    </field-validator>
  </field>
  <field name="siteRequest.releaseDate">
    <field-validator type="required">
      <message>"Desired Release Date" is required.</message>
    </field-validator>
    <field-validator type="date">
      <param name="min">08/01/2008</param>
      <param name="max">01/01/2030</param>
      <message>Invalid "Desired Release Date"</message>
    </field-validator>
  </field>
</validators>



=======================================================================
=======================================================================
==THE jsp page:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Change Request Submission Form</title>
    <sx:head/>
    <s:head/>
    <link rel="stylesheet" href="/admin/css/site-request.css"
type="text/css" />
  </head>
  <body>
    <div id="content">
      <h1>Change Request Submission Form</h1>

      <p>Please complete the form below to submit a request to the
Global 
      Solutions Delivery group.  You will receive a response within 2
business
      days.</p>

      <p>Items marked with an asterisk (<span class="required">*</span>)
are 
      required.</p>
      
      <s:form action="save" 
          namespace="/admin/siterequest"
          name="requestform" 
          method="post" 
          enctype="multipart/form-data" 
          theme="xhtml" 
          validate="true">
        <table>
          <s:textfield name="siteRequest.isid" 
              label="Submitter ISID" 
              maxlength="8" 
              required="true" />
          <s:select name="siteRequest.businessArea" 
              label="Business Area" 
              list="businessAreaList"
              required="true"/>
          <s:textfield name="siteRequest.projectTitle" 
              label="Project Title" 
              maxlength="200" 
              required="true" />
          <s:textarea name="siteRequest.description" 
              label="Description" 
              cols="34" 
              rows="5" 
              required="true" />
          <s:textfield name="siteRequest.siteName" 
              label="Site Name" 
              maxlength="200" 
              required="true" />
          <s:select name="siteRequest.issueType" 
              label="Issue Type" 
              list="issueTypeList"
              required="true" />
          <sx:datetimepicker name="siteRequest.releaseDate" 
              label="Desired Release Date" 
              displayFormat="MM/dd/yyyy" 
              required="true" />
          <s:file name="siteRequest.upload" 
              label="Attachment" 
              required="false" />
          <s:submit cssStyle="width:80px; align:left;"/>
        </table>
      </s:form>
    </div>
      
  </body>
</html>



=======================================================================
=======================================================================
==THE action class:

package siterequest;
import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class SiteRequestAction extends ActionSupport 
  implements Preparable, SessionAware {
  
  /**
   * Performs all functionality required when saving a [EMAIL PROTECTED]
SiteRequest}.
   * 
   * @return 
   *         a String indicating "success" or "failure".  If "failure", 
   *         this action's [EMAIL PROTECTED] #exception} property will be
populated.
   */
  public String save() {
    try {
      this.siteRequestFacade.save(this.siteRequest);
      return "success";
    }
    catch (Throwable exception) {
      logger.error("Unable to save SiteRequest: ", exception);
      setException(exception);
      return "failure";
    }
  }
  
  public void prepare() throws Exception {
    this.siteRequestFacade = new SiteRequestFacade();
    this.siteRequest = new SiteRequest();
    this.siteRequestList = new ArrayList<SiteRequest>();
  }

  public void setSession(Map session) {
    this.session = session;
  }

  public SiteRequest getSiteRequest() {
    return siteRequest;
  }

  public void setSiteRequest(SiteRequest siteRequest) {
    this.siteRequest = siteRequest;
  }

  private Map session;
  private SiteRequest siteRequest;
  private SiteRequestFacade siteRequestFacade;
  private Throwable exception;
  private Logger logger = Logger.getLogger(this.getClass());
}



=======================================================================
=======================================================================
==THE action form class:

package siterequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.Date;
import org.hibernate.Hibernate;

public class SiteRequest implements java.io.Serializable {

  private static final long serialVersionUID = 1L;
  private Long siteRequestId;
  private String isid;
  private String businessArea;
  private String projectTitle;
  private String description;
  private String siteName;
  private String issueType;
  private Date releaseDate;
  private String creator;
  private Date creationDate;
  private String updater;
  private Date updateDate;
  private File upload;
  private String uploadFileName;
  private String uploadContentType;
  private Blob attachment;


  public SiteRequest() {
  }

  public String getBusinessArea() {
    return businessArea;
  }

  public void setBusinessArea(String businessArea) {
    this.businessArea = businessArea;
  }

  public Date getCreationDate() {
    return creationDate;
  }

  public void setCreationDate(Date creationDate) {
    this.creationDate = creationDate;
  }

  public String getCreator() {
    return creator;
  }

  public void setCreator(String creator) {
    this.creator = creator;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public String getIsid() {
    return isid;
  }

  public void setIsid(String isid) {
    this.isid = isid;
  }

  public String getIssueType() {
    return issueType;
  }

  public void setIssueType(String issueType) {
    this.issueType = issueType;
  }

  public String getProjectTitle() {
    return projectTitle;
  }

  public void setProjectTitle(String projectTitle) {
    this.projectTitle = projectTitle;
  }

  public Date getReleaseDate() {
    return releaseDate;
  }

  public void setReleaseDate(Date releaseDate) {
    this.releaseDate = releaseDate;
  }

  public String getSiteName() {
    return siteName;
  }

  public void setSiteName(String siteName) {
    this.siteName = siteName;
  }

  public Long getSiteRequestId() {
    return siteRequestId;
  }

  public void setSiteRequestId(Long siteRequestId) {
    this.siteRequestId = siteRequestId;
  }

  public Date getUpdateDate() {
    return updateDate;
  }

  public void setUpdateDate(Date updateDate) {
    this.updateDate = updateDate;
  }

  public String getUpdater() {
    return updater;
  }

  public void setUpdater(String updater) {
    this.updater = updater;
  }

  public File getUpload() {
    return upload;
  }

  public void setUpload(File upload) {
    this.upload = upload;
  }

  public String getUploadContentType() {
    return uploadContentType;
  }

  public void setUploadContentType(String uploadContentType) {
    this.uploadContentType = uploadContentType;
  }

  public String getUploadFileName() {
    return uploadFileName;
  }

  public void setUploadFileName(String uploadFileName) {
    this.uploadFileName = uploadFileName;
  }
  
  public Blob getAttachment() {
    try {
      if(this.attachment != null) {
        return this.attachment;
      }
      else {
        if(this.upload != null) {
          return Hibernate.createBlob(new FileInputStream(this.upload));
        }
        else return null;
      }
    }
    catch (IOException ioException) {
      ioException.printStackTrace();
      return null;
    }
  }
  
  public void setAttachment(Blob attachment) {
    this.attachment = attachment;
  }
  
  public InputStream getAttachmentStream() throws SQLException {
    return (this.attachment==null ? null :
this.attachment.getBinaryStream());
  }
  
  public void setAttachmentStream(InputStream attachmentStream) throws
IOException {
    this.attachment = Hibernate.createBlob(attachmentStream);
  }
}
Notice:  This e-mail message, together with any attachments, contains
information of Merck & Co., Inc. (One Merck Drive, Whitehouse Station,
New Jersey, USA 08889), and/or its affiliates (which may be known
outside the United States as Merck Frosst, Merck Sharp & Dohme or
MSD and in Japan, as Banyu - direct contact information for affiliates is
available at http://www.merck.com/contact/contacts.html) that may be
confidential, proprietary copyrighted and/or legally privileged. It is
intended solely for the use of the individual or entity named on this
message. If you are not the intended recipient, and have received this
message in error, please notify us immediately by reply e-mail and
then delete it from your system.


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

Reply via email to