5 Replies Latest reply on Oct 23, 2007 5:56 AM by pmuir

    Junk characters after validation.

    muralikri_bng

      Hi All

      We have project being developed in the following environment

      1) Tomcat 5.5
      2) Jboss Seam 1.2.1
      3) Hibernate 3.0

      We have registration form with around 20 fields. The form enctype is ?multipart/form-data?. Following types of fields are included in the form

      1) Textbox
      2) Text Area
      3) Select Box
      4) List Box
      5) File
      6) Date

      There are some mandatory fields for which we have specified required=?true? in our xhtml file. There are also some fields for which we have hibernate validation happening.

      Now the problem is if the user submits the form without filling up the mandatory fields junk values are getting added to a textfield which is of date type.

      Example of some junk values are below
      Example 1.
      ?-----------------------------17449159816946
      Content-Disposition: form-data; name="applicant:division""

      Example 2.
      "-----------------------------17449159816946"

      Example 3.
      "
      -----------------------------11206587428982
      Content-Disposition: form-data; name="applicant:division"

      "

      Our application development is almost complete and we need to solve this problem.

      Any directions to solve this issue is greatly appreciated.

      Thx in advance
      Murali

        • 1. Re: Junk characters after validation.
          muralikri_bng

          I tried my application in Tomcat 6.0, still the problem persists...

          Murali

          • 2. Re: Junk characters after validation.
            modoc

            Can you post your xhtml file and also the backing objects which are referenced for the form fields?

            • 3. Re: Junk characters after validation.
              muralikri_bng

              Hi

              Pls find the xhtml file and 2 beans which are refferecned from this xhtml and also the action class.


              ------ xhtml starts here -----------

              <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <ui:composition xmlns="http://www.w3.org/1999/xhtml"
               xmlns:ui="http://java.sun.com/jsf/facelets"
               xmlns:h="http://java.sun.com/jsf/html"
               xmlns:f="http://java.sun.com/jsf/core"
               xmlns:s="http://jboss.com/products/seam/taglib"
               xmlns:a="https://ajax4jsf.dev.java.net/ajax"
               template="../common/template.xhtml">
              
               <ui:define name="header">
               <ui:include src="../common/header.xhtml">
               </ui:include>
               </ui:define>
               <ui:define name="menu">
               <ui:include src="../common/erpmenu.xhtml" />
               </ui:define>
              
               <ui:define name="body">
               <table width="100%" border="0" cellspacing="0" cellpadding="0">
               <tr>
               <td colspan="3" valign="top">
               <table width="100%" border="0" cellspacing="0" cellpadding="0">
               <tr>
               <td valign="top" class="space"><h:form id="applicant"
               enctype="multipart/form-data">
               <fieldset><h:messages globalOnly="true" /> <f:facet
               name="beforeInvalidField">
               <s:span styleClass="errors" />
               </f:facet> <f:facet name="afterInvalidField">
               <s:message />
               </f:facet> <s:div styleClass="errors">
               <s:message globalOnly="true" />
               </s:div> <s:validateAll>
               <table width="100%" border="0" cellpadding="0" cellspacing="0"
               class="table">
               <tr>
               <td colspan="8" class="pageflow"><s:link
               action="/pages/ERP_homepage.seam">Home</s:link> » <b>#{applicant.id > 0 ? 'Edit Profile' : 'Register'}</b></td>
               </tr>
               <tr class="table">
               <td colspan="8" align="left" class="hr"></td>
               </tr>
               <tr class="table">
               <td colspan="8" align="left" valign="top" nowrap="nowrap"
               class="t_small">( * fields are mandatory)</td>
               </tr>
               <tr class="table">
               <td valign="top" nowrap="nowrap"><h:outputLabel
               for="email">Email *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputText id="email" value="#{applicant.email}" readonly="#{employee.id > 0}"
               type="text" class="TF" style="width: 150px;" required="true" />
               </s:decorate></td>
               </tr>
              
               <tr class="table">
               <td width="20%" align="left" valign="top"><h:outputLabel
               for="password">Password *</h:outputLabel></td>
               <td width="84%" colspan="7" align="left" nowrap="nowrap"><s:decorate>
               <h:inputSecret id="password" value="#{applicant.password}"
               type="text" class="TF" style="width: 150px;" required="true"
               redisplay="true" />
               </s:decorate></td>
               </tr>
               <tr class="table">
               <td width="20%" align="left" valign="top"><h:outputLabel
               for="confirmPassword">Confirm Password *</h:outputLabel></td>
               <td width="84%" colspan="7" align="left" nowrap="nowrap"><s:decorate>
               <h:inputSecret id="confirmPassword"
               value="#{erpAction.confirmPassword}" type="text" class="TF"
               style="width: 150px;" required="true" redisplay="true" />
               </s:decorate></td>
               </tr>
               <tr class="table">
               <td width="20%" align="left" valign="top"><h:outputLabel
               for="LoginId">Employee Id *</h:outputLabel></td>
               <td width="84%" colspan="7" align="left" nowrap="nowrap"><s:decorate>
               <h:inputText id="LoginId" value="#{employee.employeeId}"
               readonly="#{employee.id > 0}" type="text" class="TF"
               style="width: 150px;" required="true" />
               </s:decorate></td>
               </tr><tr class="table">
               <td width="20%" align="left" valign="top"><h:outputLabel
               for="firstName">First Name *</h:outputLabel></td>
               <td width="84%" colspan="7" align="left" nowrap="nowrap"><s:decorate>
               <h:inputText id="firstName" value="#{applicant.firstName}"
               type="text" class="TF" style="width: 150px;" required="true" />
               </s:decorate></td>
               </tr>
               <tr class="table">
               <td align="left" valign="top" nowrap="nowrap"><h:outputLabel
               for="lastName">Last Name *</h:outputLabel></td>
               <td width="84%" colspan="7" align="left" nowrap="nowrap"><s:decorate>
               <h:inputText id="lastName" value="#{applicant.lastName}"
               type="text" class="TF" style="width: 150px;" required="true" />
               </s:decorate></td>
               </tr>
               <tr class="table">
               <td align="left" valign="top" nowrap="nowrap"><h:outputLabel
               for="mobile">Mobile *</h:outputLabel></td>
               <td colspan="7" align="left"><s:decorate>
               <h:inputText id="mobile" value="#{applicant.mobile}"
               type="text" class="TF" style="width: 150px;" required="true" />
               </s:decorate></td>
               </tr>
               <tr class="table">
               <td align="left" valign="top" nowrap="nowrap"><h:outputLabel
               for="deskPhone">Desk Phone *</h:outputLabel></td>
               <td colspan="7" align="left"><s:decorate>
               <h:inputText id="deskPhone" value="#{employee.deskPhone}"
               type="text" class="TF" style="width: 150px;" required="true" />
               </s:decorate> - Ext <span> </span> <s:decorate>
               <h:inputText id="deskPhoneExt"
               value="#{employee.deskPhoneExt}" type="text" class="TF_nl"
               size="5" maxlength="5" /> </s:decorate></td>
               </tr>
              
               <tr>
              
               <td valign="top"><h:outputLabel for="dateOfBirth">Date Of Birth *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputText id="dateOfBirth" styleClass="TF"
               value="#{applicant.dateOfBirth}" style="width: 150px;"
               required="true">
               <s:convertDateTime pattern="MM/dd/yyyy" type="date" />
               </h:inputText>
               <s:selectDate for="dateOfBirth">
               <h:graphicImage url="../images/calender.gif"
               style="margin-left:5px;cursor:pointer" />
               </s:selectDate> </s:decorate></td>
              
               </tr>
               <tr>
               <td colspan="8" valign="top"> </td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel
               for="highestQualification">Highest Level Of Education *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:selectOneMenu
               value="#{erpAction.selectedHighestQualification}"
               id="highestQualification" class="Ts" required="true">
               <f:selectItem itemLabel="Select" itemValue="" />
               <f:selectItems value="#{erpAction.highestQualifications}" />
               </h:selectOneMenu>
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top" nowrap="nowrap"><h:outputLabel
               for="otherQualification">Other Qualification</h:outputLabel></td>
               <td colspan="7"><h:inputText id="otherQualification"
               value="#{applicant.otherQualification}" type="text"
               class="TF" style="width: 150px;" /></td>
               </tr>
               <tr>
               <td valign="top" nowrap="nowrap"><h:outputLabel
               for="certification">Certifications</h:outputLabel></td>
               <td colspan="7"><h:inputText id="certification"
               value="#{employee.certification}" type="text" class="TF"
               style="width: 150px;" /></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel>Total Work Experience</h:outputLabel></td>
               <td colspan="7"><h:selectOneMenu
               value="#{erpAction.selectedExpYear}" id="totalExpYear"
               styleClass="TF_nl" style="width: 60px;" required="false">
               <f:selectItem itemLabel="Year" itemValue="0" />
               <f:selectItems value="#{erpAction.years}" />
               </h:selectOneMenu><br></br>
              
               <h:selectOneMenu value="#{erpAction.selectedExpMonth}"
               id="totalExpMonth" styleClass="TF_nl" style="width: 60px;" required="false">
               <f:selectItem itemLabel="Month" itemValue="0" />
               <f:selectItems value="#{erpAction.months}" />
               </h:selectOneMenu>
               </td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel>Duration In Current Role / Job</h:outputLabel></td>
               <td colspan="7"><h:selectOneMenu
               value="#{erpAction.selectedDurationYear}"
               id="totalDurationYear" styleClass="TF_nl" style="width: 60px;" required="false">
               <f:selectItem itemLabel="Year" itemValue="0" />
               <f:selectItems value="#{erpAction.years}" />
               </h:selectOneMenu><br></br>
              
               <h:selectOneMenu value="#{erpAction.selectedDurationMonth}"
               id="totalDurationMonth" styleClass="TF_nl" style="width: 60px;" required="false">
               <f:selectItem itemLabel="Month" itemValue="0" />
               <f:selectItems value="#{erpAction.months}" />
               </h:selectOneMenu>
               </td>
               </tr>
               <tr>
               <td colspan="8"> </td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="employeeSince">Employee Since *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputText id="employeeSince" styleClass="TF"
               value="#{employee.employeeSince}" style="width: 150px;"
               required="true">
               <s:convertDateTime pattern="MM/dd/yyyy" type="date" />
               </h:inputText>
               <s:selectDate for="employeeSince">
               <span class="t_small"> <h:graphicImage
               url="../images/calender.gif" /> </span>
               </s:selectDate>
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="division">Division *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:selectOneMenu value="#{erpAction.selectedDivision}"
               id="division" class="Ts" required="true">
               <f:selectItem itemLabel="Select" itemValue="" />
               <f:selectItems value="#{erpAction.divisions}" />
               </h:selectOneMenu>
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="currentPosition">Current Position</h:outputLabel></td>
               <td colspan="7"><label for="fileField"> <h:inputText
               id="currentPosition" value="#{employee.currentPosition}"
               type="text" class="TF" style="width: 150px;" /> </label></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="managerName">Reporting Manager's Name</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputText id="managerName" value="#{employee.managerName}"
               type="text" class="TF" style="width: 150px;">
               <s:validate />
               </h:inputText>
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="primarySkill">Primary Skills *</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputTextarea id="primarySkill"
               value="#{applicant.primarySkill}" cols="45" rows="5"
               class="TF_nl" required="true" />
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="secondarySkill">Secondary Skills</h:outputLabel></td>
               <td colspan="7"><s:decorate>
               <h:inputTextarea id="secondarySkill"
               value="#{applicant.secondarySkill}" cols="45" rows="5"
               class="TF_nl" />
               </s:decorate></td>
               </tr>
               <tr>
               <td valign="top"><h:outputLabel for="additionalComment">Additional Comments</h:outputLabel></td>
               <td colspan="7"><s:decorate><h:inputTextarea id="additionalComment"
               value="#{applicant.additionalComment}" cols="45" rows="5"
               class="TF_nl" /></s:decorate></td>
               </tr>
              
               <tr>
               <td colspan="8"><h:outputLabel for="uploadResume">
               <b>Upload Resume</b>
               <span class="t_small">(you can paste your resume here
               or you can upload the File)</span>
               </h:outputLabel></td>
               </tr>
               <tr>
               <td colspan="8"><h:outputLabel>
               <span class="t_small">Browse and upload resume<br />
               </span>
               <s:fileUpload data="#{applicant.attachedResume}"
               fileName="#{applicant.attachedResumeName}"
               contentType="#{applicant.resumeContentType}" accept="" /> (Maximum size of the file that can be uploaded is 50 Kb).
               </h:outputLabel> <s:link value="View Resume"
               action="#{erpAction.downloadFileContent}"
               rendered="#{erpAction.visible}" target="_blank" /></td>
               </tr>
               <tr>
               <td></td>
               </tr>
               <tr>
               <td colspan="8"><h:outputLabel>
               <span class="t_small">Paste Your Resume Here </span>
               </h:outputLabel><br /><s:decorate>
               <h:inputTextarea id="resume" value="#{applicant.resume}"
               cols="80" rows="10" class="TF_nl" /></s:decorate></td>
               </tr>
               <tr>
               <td colspan="8" align="center" valign="middle"><br />
               <h:commandButton id="applyEmployee"
               action="#{erpAction.applyJob}" value="Save and Apply"
               class="button"
               rendered="#{(applicant.id > 0 and erpAction.apply == true)}" /><span>
               </span><h:commandButton id="registerEmployee"
               action="#{erpAction.register}" value="Register"
               class="button" rendered="#{applicant.id == 0}" /><span>
               </span> <h:commandButton id="updateEmployee"
               action="#{erpAction.register}" value="Update" class="button"
               rendered="#{(applicant.id > 0 and erpAction.update == true)}" /><span>
               </span> <h:commandButton id="cancelEmployee"
               action="#{erpAction.cancel}" value="Cancel" class="button"
               immediate="true" /></td>
               </tr>
               </table>
               </s:validateAll></fieldset>
               </h:form></td>
               </tr>
               <tr>
               <td colspan="2" align="right" valign="top"></td>
               </tr>
               </table>
               </td>
               </tr>
               </table>
               <script>
               function foucsOnFirstField(){
              
               if(document.getElementById("applicant:email") != null){
               if(document.getElementById("applicant:email").readOnly == false){
               document.getElementById("applicant:email").focus();
               }else{
               document.getElementById("applicant:password").focus();
               }
               }else{
               document.getElementById("applicant:password").focus();
               }
               }
              </script>
               </ui:define>
              </ui:composition>

              ------ xhtml ends here -----------


              The xhtml reffers to 2 beans

              --------------- first bean starts here-------------
              package com._3iinfotech.applications.vedaenterprise.persistance;

              import java.io.Serializable;
              import java.util.Date;
              import java.util.List;

              import javax.persistence.CascadeType;
              import javax.persistence.Column;
              import javax.persistence.Entity;
              import javax.persistence.FetchType;
              import javax.persistence.GeneratedValue;
              import javax.persistence.GenerationType;
              import javax.persistence.Id;
              import javax.persistence.JoinColumn;
              import javax.persistence.JoinTable;
              import javax.persistence.Lob;
              import javax.persistence.ManyToMany;
              import javax.persistence.ManyToOne;
              import javax.persistence.OneToMany;
              import javax.persistence.OneToOne;
              import javax.persistence.Table;
              import javax.persistence.Temporal;
              import javax.persistence.TemporalType;
              import javax.persistence.UniqueConstraint;

              import org.hibernate.validator.Email;
              import org.hibernate.validator.Length;
              import org.hibernate.validator.NotNull;
              import org.hibernate.validator.Past;
              import org.hibernate.validator.Pattern;
              import org.jboss.seam.ScopeType;
              import org.jboss.seam.annotations.Name;
              import org.jboss.seam.annotations.Scope;

              import com._3iinfotech.applications.vedaenterprise.common.DatabaseTables;


              @Entity
              @Name("applicant")
              @Scope(ScopeType.SESSION)
              @Table(name = DatabaseTables.APPLICANT_TABLE)

              public class Applicant implements Serializable {

              /* constructor for Applicant */
              public Applicant(){
              }

              // This is the foreign key reference to usergroups table
              public static final String APPLICANT_ID = "applicantId";
              public static final String FOLDER_ID = "folderId";


              /* id : this is primary key and auto generated */
              public static final String ID_COLUMN = "id";
              @Id
              @Column(name = ID_COLUMN, length = 11, nullable = false, unique = true, updatable = false, insertable = false)
              @GeneratedValue(strategy = GenerationType.AUTO)
              private int id;

              /* password - appicant's password */
              public static final String PASSWORD_COLUMN = "password";
              @NotNull
              @Length(min = 8, max = 32)
              @Column(name = PASSWORD_COLUMN, nullable = false)
              @Pattern(regex = "^\\S(\\S)*$", message = "Invalid Password!")
              private String password;

              /* firstName - applicant first name */
              public static final String FIRST_NAME_COLUMN = "firstName";
              @NotNull
              @Length(min = 3, max = 25)
              @Pattern(regex="[A-Za-z]+[ A-Za-z]+" , message="Invalid Name! Numbers/Special characters are not allowed!")
              @Column(name = FIRST_NAME_COLUMN, nullable = false)
              private String firstName;

              /* lastName - applicant last name */
              public static final String LAST_NAME_COLUMN = "lastName";
              @NotNull
              @Length(min = 3, max = 25)
              @Pattern(regex="[A-Za-z]+[ A-Za-z]+" , message="Invalid Name! Numbers/Special characters are not allowed!")
              @Column(name = LAST_NAME_COLUMN, nullable = false)
              private String lastName;

              /* mobile - applicant mobile number */
              public static final String MOBILE_COLUMN = "mobile";
              @NotNull
              @Pattern(regex = "(\\d*\\d*)" , message="Use Only Integers. No spaces or special characters are allowed")
              @Column(name = MOBILE_COLUMN, nullable = false)
              private String mobile;

              /* email - applicant email id */
              public static final String EMAIL_COLUMN = "email";
              @NotNull
              @Pattern(regex ="[a-zA-Z0-9\\-_\\.]++@[a-zA-Z0-9\\-]++(.[a-zA-Z\\-]++)++", message="Not a valid Email")
              @Column(name = EMAIL_COLUMN, unique = true)
              private String email;

              /* dateOfBirth - applicant dateOfBirth */
              public static final String DATE_OF_BIRTH_COLUMN = "dateOfBirth";
              @Temporal (TemporalType.DATE)
              @NotNull
              @Past
              @Column(name = DATE_OF_BIRTH_COLUMN, nullable = false)
              private Date dateOfBirth;

              /* totalExpYear - Applicant total number of year experience */
              public static final String TOTAL_EXP_YEAR_COLUMN = "totalExpYear";
              @ManyToOne
              @JoinColumn(name = TOTAL_EXP_YEAR_COLUMN)
              private DictionaryValue totalExpYear;

              /* totalExpMonth - Applicant total number of month experience */
              public static final String TOTAL_EXP_MONTH_COLUMN = "totalExpMonth";
              @ManyToOne
              @JoinColumn(name = TOTAL_EXP_MONTH_COLUMN)
              private DictionaryValue totalExpMonth;

              /* otherQualifiction - applicant otherQualifiction */
              public static final String OTHER_QUALIFICATION_COLUMN = "otherQualification";
              @Column(name = OTHER_QUALIFICATION_COLUMN)
              private String otherQualification;

              /* primaryskill - applicant Primary skills */
              public static final String PRIMARY_SKILL_COLUMN = "primarySkill";
              @NotNull
              @Length(min = 10, max = 5000, message = "Primary skill should be between {min} and {max} characters.")
              @Pattern (regex = "^\\S+((\\s)*(\\S)*)*(\\s)*$", message = "Invalid Primary Skills")
              @Column(name = PRIMARY_SKILL_COLUMN, nullable = false, columnDefinition="TEXT")
              private String primarySkill;

              /* SecondarySkill - applicant Secondary skills */
              public static final String SECONDARY_SKILL_COLUMN = "secondarySkill";
              @Length(min = 10, max = 5000, message = "Secondary Skill should be between {min} and {max} characters.")
              @Column(name = SECONDARY_SKILL_COLUMN, columnDefinition="TEXT")
              private String secondarySkill;

              /* additionalComment - applicant additional Comment */
              public static final String ADDITIONAL_COMMENT_COLUMN = "additionalComment";
              @Length(min = 10, max = 5000, message = "Additional Comment should be between {min} and {max} characters.")
              @Column(name = ADDITIONAL_COMMENT_COLUMN, columnDefinition="TEXT")
              private String additionalComment;

              public static final String ATTACHED_RESUME_NAME_COLUMN = "attachedResumeName";
              @Column(name = ATTACHED_RESUME_NAME_COLUMN)
              private String attachedResumeName;

              /* FILE: attached file */
              public static final String ATTACHED_RESUME_COLUMN = "attachedResume";
              @Lob
              @Column(name = ATTACHED_RESUME_COLUMN)
              private byte[] attachedResume;

              /* FILE: Content type for resume*/
              public static final String RESUME_CONTENT_TYPE = "resumeContentType";
              @Column(name = RESUME_CONTENT_TYPE)
              private String resumeContentType;

              /* resume: resume */
              public static final String RESUME_COLUMN = "resume";
              @Length(min = 10, max = 10000, message = "Resume should be between {min} and {max} characters.")
              @Column(name = RESUME_COLUMN, columnDefinition="TEXT")
              private String resume;

              /* status - whether the user is active or inActive */
              public static final String STATUS_COLUMN = "status";
              @Column(name = STATUS_COLUMN, columnDefinition = "BOOLEAN")
              private boolean status;

              /* createdOn: created on which date */
              public static final String CREATED_ON_COLUMN = "createdOn";
              @Column(name = CREATED_ON_COLUMN)
              private Date createdOn;

              /* modifiedOn: modifiedOn which date */
              public static final String MODIFIED_ON_COLUMN = "lastModifiedOn";
              @Column(name = MODIFIED_ON_COLUMN)
              private Date lastModifiedOn;

              /* createdByAdminId :created by admin */
              public static final String CREATED_BY_USER_ID_COLUMN = "createdByUserId";
              @ManyToOne
              @JoinColumn (name = CREATED_BY_USER_ID_COLUMN)
              private UserMaster createdByUser;

              /*
              * lastModifiedByUser - contains the id of the user who last modified this
              * profile, should be like a foreign key
              */
              public static final String LAST_MODIFIED_BY_USER_ID_COLUMN = "modifiedByUserId";
              @ManyToOne
              @JoinColumn(name = LAST_MODIFIED_BY_USER_ID_COLUMN)
              private UserMaster lastModifiedByUser;

              /* jobApplications - list containing the jobs applied by the applicant */
              @OneToMany
              @JoinColumn (name = JobApplication.APPLICANT_ID_COLUMN, referencedColumnName = ID_COLUMN)
              private List jobApplications;


              /* jobApplications - list containing the jobs applied by the applicant */
              @OneToMany
              @JoinColumn (name = JobCart.APPLICANT_ID_COLUMN, referencedColumnName = ID_COLUMN)
              private List cartJobs;

              /* candidate - candidate reference bean */
              @OneToOne (cascade = CascadeType.ALL)
              @JoinColumn(name = Candidate.CANDIDATE_COLUMN)
              private Candidate candidate;

              /* employee - employee reference bean */
              @OneToOne (cascade = CascadeType.ALL)
              @JoinColumn(name = Employee.EMPLOYEE_COLUMN)
              private Employee employee;

              public static final String JOB_ID = "jobId";
              @ManyToMany
              @JoinTable(name="jobapplication", joinColumns = { @JoinColumn(name = APPLICANT_ID) },
              inverseJoinColumns = { @JoinColumn(name = JOB_ID) })
              private List jobs;

              //Bug no -5398-- this is used to get the applicant list add to each folder.
              //jobApplications - list containing the jobs applied by the applicant
              @ManyToMany(targetEntity = Folder.class, mappedBy = "appList", cascade={CascadeType.PERSIST, CascadeType.MERGE})
              private List applicantFolderList;

              /**
              *
              * @return lastModifiedByUser
              */
              public UserMaster getLastModifiedByUser() {
              return lastModifiedByUser;
              }

              /**
              *
              * @param lastModifiedByUser
              */
              public void setLastModifiedByUser(UserMaster lastModifiedByUser) {
              this.lastModifiedByUser = lastModifiedByUser;
              }

              /**
              *
              * @return createdByUser
              */
              public UserMaster getCreatedByUser() {
              return createdByUser;
              }

              /**
              *
              * @param createdByUser
              */
              public void setCreatedByUser(UserMaster createdByUser) {
              this.createdByUser = createdByUser;
              }

              /**
              *
              * @return createdOn
              */
              public Date getCreatedOn() {
              return createdOn;
              }

              /**
              *
              * @param createdOn
              */
              public void setCreatedOn(Date createdOn) {
              this.createdOn = createdOn;
              }

              /**
              *
              * @return lastModifiedOn
              */
              public Date getLastModifiedOn() {
              return lastModifiedOn;
              }

              /**
              *
              * @param lastModifiedOn
              */
              public void setLastModifiedOn(Date lastModifiedOn) {
              this.lastModifiedOn = lastModifiedOn;
              }

              /**
              *
              * @return status
              */
              public boolean isStatus() {
              return status;
              }

              /**
              *
              * @param status
              */
              public void setStatus(boolean status) {
              this.status = status;
              }

              /**
              *
              * @return resume
              */
              public String getResume() {
              return resume;
              }

              /**
              *
              * @param resume
              */
              public void setResume(String resume) {
              this.resume = resume;
              }

              /**
              *
              * @return attachedResume
              */
              public byte[] getAttachedResume() {
              return attachedResume;
              }

              /**
              *
              * @param attachedResume
              */
              public void setAttachedResume(byte[] attachedResume) {
              this.attachedResume = attachedResume;
              }

              /**
              *
              * @return attachedResumeName
              */
              public String getAttachedResumeName() {
              return attachedResumeName.substring(attachedResumeName.lastIndexOf("\\")+1);
              }

              /**
              *
              * @param attachedResumeName
              */
              public void setAttachedResumeName(String attachedResumeName) {
              this.attachedResumeName = attachedResumeName;
              }

              /**
              *
              * @return resumeContentType
              */
              public String getResumeContentType() {
              return resumeContentType;
              }

              /**
              *
              * @param resumeContentType
              */
              public void setResumeContentType(String resumeContentType) {
              this.resumeContentType = resumeContentType;
              }

              /**
              *
              * @return additionalComment
              */
              public String getAdditionalComment() {
              return additionalComment;
              }

              /**
              *
              * @param additionalComment
              */
              public void setAdditionalComment(String additionalComment) {
              this.additionalComment = additionalComment;
              }

              /**
              *
              * @return primarySkill
              */
              public String getPrimarySkill() {
              return primarySkill;
              }

              /**
              *
              * @param primarySkill
              */
              public void setPrimarySkill(String primarySkill) {
              this.primarySkill = primarySkill;
              }

              /**
              *
              * @return secondarySkill
              */
              public String getSecondarySkill() {
              return secondarySkill;
              }

              /**
              *
              * @param secondarySkill
              */
              public void setSecondarySkill(String secondarySkill) {
              this.secondarySkill = secondarySkill;
              }

              /**
              *
              * @return dateOfBirth
              */
              public Date getDateOfBirth() {
              return dateOfBirth;
              }

              /**
              *
              * @param dateOfBirth
              */
              public void setDateOfBirth(Date dateOfBirth) {
              this.dateOfBirth = dateOfBirth;
              }

              /**
              *
              * @return email
              */
              public String getEmail() {
              return email;
              }

              /**
              *
              * @param email
              */
              public void setEmail(String email) {
              this.email = email;
              }

              /**
              *
              * @return otherQualifiction
              */
              public String getOtherQualification() {
              return otherQualification;
              }

              /**
              *
              * @param otherQualifiction
              */
              public void setOtherQualification(String otherQualification) {
              this.otherQualification = otherQualification;
              }

              /**
              *
              * @return firstName
              */
              public String getFirstName() {
              return firstName;
              }

              /**
              *
              * @param firstName
              */
              public void setFirstName(String firstName) {
              this.firstName = firstName;
              }

              /**
              *
              * @return lastName
              */
              public String getLastName() {
              return lastName;
              }

              /**
              *
              * @param lastName
              */
              public void setLastName(String lastName) {
              this.lastName = lastName;
              }

              /**
              *
              * @return mobile
              */
              public String getMobile() {
              return mobile;
              }

              /**
              *
              * @param mobile
              */
              public void setMobile(String mobile) {
              this.mobile = mobile;
              }

              /**
              *
              * @return password
              */
              public String getPassword() {
              return password;
              }

              /**
              *
              * @param password
              */
              public void setPassword(String password) {
              this.password = password;
              }

              /**
              *
              * @return
              */
              public List getJobApplications() {
              return jobApplications;
              }

              /**
              *
              * @param jobApplications
              */
              public void setJobApplications(List jobApplications) {
              this.jobApplications = jobApplications;
              }

              /**
              *
              * @return applicantId
              */
              public int getId() {
              return id;
              }

              /**
              *
              * @param applicantId
              */
              public void setId(int id) {
              this.id = id;
              }

              /**
              *
              * @return totalExpMonth
              */
              public DictionaryValue getTotalExpMonth() {
              return totalExpMonth;
              }

              /**
              *
              * @param totalExpMonth
              */
              public void setTotalExpMonth(DictionaryValue totalExpMonth) {
              this.totalExpMonth = totalExpMonth;
              }

              /**
              *
              * @return totalExpYear
              */
              public DictionaryValue getTotalExpYear() {
              return totalExpYear;
              }

              /**
              *
              * @param totalExpYear
              */
              public void setTotalExpYear(DictionaryValue totalExpYear) {
              this.totalExpYear = totalExpYear;
              }

              public Candidate getCandidate() {
              return candidate;
              }

              public void setCandidate(Candidate candidate) {
              this.candidate = candidate;
              }

              public Employee getEmployee() {
              return employee;
              }

              public void setEmployee(Employee employee) {
              this.employee = employee;
              }

              /**
              * @return the cartJobs
              */
              public List getCartJobs() {
              return cartJobs;
              }

              /**
              * @param cartJobs the cartJobs to set
              */
              public void setCartJobs(List cartJobs) {
              this.cartJobs = cartJobs;
              }

              @Override
              public boolean equals(Object arg0) {
              if (arg0 instanceof Applicant) {
              return (this.getId()==((Applicant) arg0).getId());
              }else{
              return super.equals(arg0);
              }
              }



              /**
              * @return the applicantFolderList
              */
              public List getApplicantFolderList() {
              return applicantFolderList;
              }

              /**
              * @param applicantFolderList the applicantFolderList to set
              */
              public void setApplicantFolderList(List applicantFolderList) {
              this.applicantFolderList = applicantFolderList;
              }

              /**
              * @param jobs the jobs to set
              */
              public void setJobs(List jobs) {
              this.jobs = jobs;
              }

              /**
              * @return the jobs
              */
              public List getJobs() {
              return jobs;
              }

              }

              --------------- first bean ends here-------------

              --------------- second bean ends here-------------
              package com._3iinfotech.applications.vedaenterprise.persistance;

              import java.io.Serializable;
              import java.util.Collection;
              import java.util.Date;

              import javax.persistence.Column;
              import javax.persistence.Entity;
              import javax.persistence.GeneratedValue;
              import javax.persistence.GenerationType;
              import javax.persistence.Id;
              import javax.persistence.JoinColumn;
              import javax.persistence.ManyToOne;
              import javax.persistence.OneToMany;
              import javax.persistence.OneToOne;
              import javax.persistence.Table;
              import javax.persistence.Temporal;
              import javax.persistence.TemporalType;

              import org.hibernate.validator.NotNull;
              import org.hibernate.validator.Past;
              import org.hibernate.validator.Pattern;
              import org.jboss.seam.ScopeType;
              import org.jboss.seam.annotations.Name;
              import org.jboss.seam.annotations.Scope;

              import com._3iinfotech.applications.vedaenterprise.common.DatabaseTables;
              /**
              * Employee class is designed to set and to get the values of the employee
              * table
              *
              *
              * Reviewer Name: Murali/Pradeep
              * Review Date:
              * Comments:
              *
              *
              * @author Amit Kumar Jain
              * @version 1.0 14-August-2007
              *
              */

              @Entity
              @Name("employee")
              @Scope(ScopeType.SESSION)
              @Table(name = DatabaseTables.EMPLOYEE_TABLE)
              public class Employee implements Serializable {

              public Employee() {
              }
              /**
              * registration id - should be primary key and auto generated Your
              * annotations
              */
              public static final String ID_COLUMN = "id";
              @Id
              @Column(name = ID_COLUMN, unique = true, nullable = false, updatable = false, insertable = false, length = 11)
              @GeneratedValue(strategy = GenerationType.AUTO)
              private int id;

              /* telephone - Employee telephone number */
              public static final String DESK_PHONE_COLUMN = "deskPhone";
              @NotNull
              @Pattern(regex = "(\\d*\\d*)" , message="Use Only Integers. No spaces or special characters are allowed")
              @Column(name = DESK_PHONE_COLUMN, nullable = false)
              private String deskPhone;

              /* ext - Employee telephone number */
              public static final String DESK_PHONE_EXT_COLUMN = "deskPhoneExt";
              @Pattern(regex = "(\\d*\\d*)" , message="Use Only Integers. No spaces or special characters are allowed")
              @Column(name = DESK_PHONE_EXT_COLUMN)
              private String deskPhoneExt;

              /* totalDurationYear - Employee total number of year duration in current job */
              public static final String TOTAL_DURATION_YEAR_COLUMN = "totalDurationYear";
              @ManyToOne
              @JoinColumn(name = TOTAL_DURATION_YEAR_COLUMN)
              private DictionaryValue totalDurationYear;

              /*
              * totalDurationMonth - Employee total number of month duration in current
              * job
              */
              public static final String TOTAL_DURATION_MONTH_COLUMN = "totalDurationMonth";
              @ManyToOne
              @JoinColumn(name = TOTAL_DURATION_MONTH_COLUMN)
              private DictionaryValue totalDurationMonth;

              /* dateOfJoining - Employee joining date */
              public static final String EMPLOYEE_SINCE_COLUMN = "employeeSince";
              @Temporal (TemporalType.DATE)
              @NotNull
              @Past
              @Column(name = EMPLOYEE_SINCE_COLUMN, nullable = false)
              private Date employeeSince;

              /* division - Employee division in the current company */
              public static final String DIVISION_COLUMN = "division";
              @NotNull
              @ManyToOne
              @JoinColumn(name = DIVISION_COLUMN, nullable = false)
              private DictionaryValue division;

              /* certification - Employee certification */
              public static final String CERTIFICATION_COLUMN = "certification";
              @Column(name = CERTIFICATION_COLUMN)
              private String certification;

              /* highestQualification - Employee highestQualification */
              public static final String HIGHEST_QUALIFICATION_COLUMN = "highestQualification";
              @NotNull
              @ManyToOne
              @JoinColumn(name = HIGHEST_QUALIFICATION_COLUMN, nullable = false)
              private DictionaryValue highestQualification;


              /* designation - Employee designation in the current company */
              public static final String CURRENT_POSITION_COLUMN = "currentPosition";
              @Column(name = CURRENT_POSITION_COLUMN)
              private String currentPosition;

              /* managerName - Employee reporting manager's name */
              public static final String MANAGER_NAME_COLUMN = "managerName";
              @Column(name = MANAGER_NAME_COLUMN)
              @Pattern(regex="[A-Za-z]+[ A-Za-z]+" , message="Invalid Name! Numbers/Special characters are not allowed!")
              private String managerName;

              /* some comments */
              public static final String EMPLOYEE_COLUMN = "employee";
              @OneToOne (mappedBy = EMPLOYEE_COLUMN)
              private Applicant applicant;

              /* loginId: applicant's login id */
              public static final String EMPLOYEE_ID_COLUMN = "employeeId";
              @Column(name = EMPLOYEE_ID_COLUMN, nullable = false, unique = true)
              @Pattern (regex = "^\\S+((\\s)*(\\S)*)*(\\s)*$", message = "Invalid Employee ID")
              private String employeeId;



              /**
              * @return Returns the employeeSince.
              */
              public Date getEmployeeSince() {
              return employeeSince;
              }

              /**
              * @param employeeSince
              * The employeeSince to set.
              */
              public void setEmployeeSince(Date employeeSince) {
              this.employeeSince = employeeSince;
              }

              /**
              * @return Returns the currentPosition.
              */
              public String getCurrentPosition() {
              return currentPosition;
              }

              /**
              * @param currentPosition
              * The currentPosition to set.
              */
              public void setCurrentPosition(String currentPosition) {
              this.currentPosition = currentPosition;
              }

              /**
              * @return Returns the division.
              */
              public DictionaryValue getDivision() {
              return division;
              }

              /**
              * @param division
              * The division to set.
              */
              public void setDivision(DictionaryValue division) {
              this.division = division;
              }

              /**
              * @return Returns the id.
              */
              public int getId() {
              return id;
              }

              /**
              * @param id
              * The id to set.
              */
              public void setId(int id) {
              this.id = id;
              }

              /**
              * @return Returns the managerName.
              */
              public String getManagerName() {
              return managerName;
              }

              /**
              * @param managerName
              * The managerName to set.
              */
              public void setManagerName(String managerName) {
              this.managerName = managerName;
              }

              /**
              * @return Returns the telephone.
              */
              public String getDeskPhone() {
              return deskPhone;
              }

              /**
              * @param telephone
              * The telephone to set.
              */
              public void setDeskPhone(String deskPhone) {
              this.deskPhone = deskPhone;
              }

              /**
              * @return Returns the totalDurationMonth.
              */
              public DictionaryValue getTotalDurationMonth() {
              return totalDurationMonth;
              }

              /**
              * @param totalDurationMonth
              * The totalDurationMonth to set.
              */
              public void setTotalDurationMonth(DictionaryValue totalDurationMonth) {
              this.totalDurationMonth = totalDurationMonth;
              }

              /**
              * @return Returns the totalDurationYear.
              */
              public DictionaryValue getTotalDurationYear() {
              return totalDurationYear;
              }

              /**
              * @param totalDurationYear
              * The totalDurationYear to set.
              */
              public void setTotalDurationYear(DictionaryValue totalDurationYear) {
              this.totalDurationYear = totalDurationYear;
              }

              /**
              * @return Returns the deskPhoneExt.
              */
              public String getDeskPhoneExt() {
              return deskPhoneExt;
              }

              /**
              * @param deskPhoneExt
              * The deskPhoneExt to set.
              */
              public void setDeskPhoneExt(String deskPhoneExt) {
              this.deskPhoneExt = deskPhoneExt;
              }

              /**
              * @return certification.
              *
              */
              public String getCertification() {
              return certification;
              }

              /**
              * @param certification
              *
              */
              public void setCertification(String certification) {
              this.certification = certification;
              }

              /**
              *
              * @return highestQualification
              */
              public DictionaryValue getHighestQualification() {
              return highestQualification;
              }

              /**
              *
              * @param highestQualification
              */
              public void setHighestQualification(DictionaryValue highestQualification) {
              this.highestQualification = highestQualification;
              }

              /**
              *
              * @return applicant
              */
              public Applicant getApplicant() {
              return applicant;
              }

              /**
              *
              * @param applicant
              */
              public void setApplicant(Applicant applicant) {
              this.applicant = applicant;
              }

              /**
              *
              * @return employeeId
              */
              public String getEmployeeId() {
              return employeeId;
              }

              /**
              *
              * @param employeeId
              */
              public void setEmployeeId(String employeeId) {
              this.employeeId = employeeId;
              }
              }
              --------------- second bean ends here-------------


              --------------- action class starts here ------------
              package com._3iinfotech.applications.vedaenterprise.webapp.actions;

              import java.io.File;
              import java.util.ArrayList;
              import java.util.Date;
              import java.util.HashMap;
              import java.util.Iterator;
              import java.util.List;

              import javax.faces.application.FacesMessage;
              import javax.faces.context.FacesContext;
              import javax.faces.model.SelectItem;
              import javax.servlet.http.HttpServletRequest;

              import org.hibernate.Criteria;
              import org.hibernate.Session;
              import org.hibernate.criterion.MatchMode;
              import org.hibernate.criterion.Order;
              import org.hibernate.criterion.Restrictions;
              import org.hibernate.validator.Length;
              import org.hibernate.validator.NotNull;
              import org.jboss.seam.ScopeType;
              import org.jboss.seam.Seam;
              import org.jboss.seam.annotations.Factory;
              import org.jboss.seam.annotations.In;
              import org.jboss.seam.annotations.Logger;
              import org.jboss.seam.annotations.Name;
              import org.jboss.seam.annotations.Out;
              import org.jboss.seam.annotations.Scope;
              import org.jboss.seam.annotations.datamodel.DataModel;
              import org.jboss.seam.core.FacesMessages;
              import org.jboss.seam.log.Log;

              import com._3iinfotech.applications.vedaenterprise.common.Constants;
              import com._3iinfotech.applications.vedaenterprise.common.DatabaseTables;
              import com._3iinfotech.applications.vedaenterprise.common.ExportConstants;
              import com._3iinfotech.applications.vedaenterprise.persistance.Applicant;
              import com._3iinfotech.applications.vedaenterprise.persistance.DictionaryValue;
              import com._3iinfotech.applications.vedaenterprise.persistance.Employee;
              import com._3iinfotech.applications.vedaenterprise.persistance.Job;
              import com._3iinfotech.applications.vedaenterprise.persistance.JobApplication;
              import com._3iinfotech.applications.vedaenterprise.persistance.Referral;
              import com._3iinfotech.applications.vedaenterprise.persistance.UserMaster;
              import com._3iinfotech.applications.vedaenterprise.persistance.UserType;
              import com._3iinfotech.applications.vedaenterprise.webapp.util.Pagination;
              import com._3iinfotech.applications.vedaenterprise.webapp.util.Util;

              /**
              * ErpAction class is designed to implement all the functionality of ERP module
              * such as to register/update an employee, referred a candidate for a job, IJP
              * and searching.
              *
              *
              * Reviewer Name: Murali/Pradeep
              * Review Date:
              * Comments:
              *
              *
              * @author Amit Kumar Jain
              * @version 1.0 20-August-2007
              *
              */

              @Name("erpAction")
              @Scope(ScopeType.SESSION)
              public class ErpAction extends Pagination {

              /* variable - cinfirmPassword */
              @NotNull
              @Length(min = 8, max = 32)
              private String confirmPassword;

              /* this is the employee bean declaration */
              @In(create = true)
              @Out(required = false)
              private Employee employee;

              /* this is the applicant bean declaration */
              @In(required = false, create = true)
              private Applicant applicant;

              /* this is the userMaster bean declaration */
              @In(required = false, create = true)
              private UserMaster currentUserMaster;

              /* this is the userTypeAction class declaration */
              @In(create = true)
              private UserTypeAction userTypeAction;

              /* this is the dictionaryAction declaration */
              @In(create = true)
              private DictionaryAction dictionaryAction;

              /* this is the referral bean declaration */
              @In(create = true)
              private Referral referral;

              /* this is the job bean declaration */
              @In(create = true)
              @Out(required = false)
              private Job job;

              /* this is the jobApplication bean declaration */
              @In(required = false, create = true)
              @Out(required = false)
              private JobApplication jobApplication;

              /* this is the session name to get the hibernate session injected. */
              @In
              private Session vedaenterpriseDatabase;

              /* this face message is used to display the message */
              @In
              private FacesMessages facesMessages;

              /* this is the declaration for log */
              @Logger
              private Log log;

              /* this variable is used to get the selected qualification form the UI */
              private int selectedHighestQualification;

              /* this variable is used to get the locationId form the UI */
              private int locationId;

              /* this variable is used to get the selected year of experience form the UI */
              private int selectedExpYear;

              /* this variable is used to get the selected year of experience form the UI */
              private int selectedExpMonth;

              /*
              * this variable is used to get the selected duration of year in this
              * company form the UI
              */
              private int selectedDurationYear;

              /*
              * this variable is used to get the selected duration of month in this
              * company form the UI
              */
              private int selectedDurationMonth;

              /* this variable is used to get the selected division form the UI */
              private int selectedDivision;

              /* this variable is used to get the divisionId for job object form the UI */
              private int divisionId;

              /* this variable is used to get the typeId form the UI */
              private int typeId;

              /* this datamodel contains hot jobs list from the database. */
              @DataModel
              private List hotJobs;

              /* this datamodel contains all jobs list from the database. */
              @DataModel
              private List searchJobsErp;

              /* this variable is used to get exportSelectedJobs. */
              private List exportSelectedJobs;

              /* this datamodel contains all jobs list of export jobs. */
              @DataModel
              private List exportJobs;

              /* this field is used to store list of header */
              private List fields;

              /* this field is used to define export format */
              private String exportFormat;

              /* this variable is used to get the keyword form the UI */
              public String keyword;

              /* this variable is used show or hide search criteria fields */
              private boolean showHide = true;

              /* this variable is used to define export type */
              private int exportId;

              /* this variable is used to define export type */
              private String exportIdString;

              /* this variable is used to forget password purpose */
              private int forgetPassword;

              /* this variable is used for loginId */
              private String loginId;

              /* This is used to get the jobs which belongs to hot jobs */
              private boolean hotJob;

              /* set the status of hot jobs */
              private boolean hotJobOrList = false;

              /* this variable is used to set flag to render button */
              private boolean apply = false;

              /* this variable is used to set flag to render button */
              private boolean update = true;

              /* this variable is used to set flag to return appropriate location */
              private boolean isFromERPHome = false;

              /* this variable is used to set flag to return appropriate location */
              private boolean isFromERPUpdate = false;


              /* constructor for ErpAction */
              public ErpAction() {
              }

              /**
              * This method is used to validate applicant is already register or not,
              * validate the password .
              *
              * @return isValidate
              */
              private boolean validate() {

              boolean isValidate = true;

              /* check it is registered employee or not. */
              if (applicant.getId() == 0) {

              /* check email is already exist or not. */
              if ((Long) vedaenterpriseDatabase.createQuery(
              " SELECT COUNT(*) FROM " + DatabaseTables.APPLICANT_CLASS
              + " A WHERE A." + Applicant.EMAIL_COLUMN
              + " = #{applicant.email}").uniqueResult() != 0) {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "duplicateEmail", new Object[] { applicant
              .getEmail() });
              isValidate = false;
              }

              // Task ID: 7187
              /* check EmployeeId is already exist or not. */
              if ((Long) vedaenterpriseDatabase.createQuery(
              " SELECT COUNT(*) FROM " + DatabaseTables.EMPLOYEE_CLASS
              + " E WHERE E." + Employee.EMPLOYEE_ID_COLUMN
              + " = #{employee.employeeId}").uniqueResult() != 0) {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "duplicateEmployeeId", new Object[] { employee
              .getEmployeeId() });
              isValidate = false;
              }
              }


              /* check password is matched or not. */
              if (!applicant.getPassword().equals(confirmPassword)) {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "matchpassword");
              log.info(" password and confirm password does not match. ");
              isValidate = false;
              }

              /* check Employee Since date is greater than DOB. */
              if (applicant.getDateOfBirth().after(employee.getEmployeeSince())) {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "employeesincelessthandob");
              log.info("Employee Since date should be greater than DOB");
              isValidate = false;
              }
              // if total year of exp. is less than Relevant Year of Exp. then
              // add faces message and set validate flag to false.
              if (selectedDurationYear > selectedExpYear) {

              // adding the message in the properties file.
              facesMessages.addFromResourceBundle("relevantexplessthantotal",
              FacesMessage.SEVERITY_INFO, "relevantexplessthantotal",
              new Object[] {});

              // adding the information in the log file.
              log
              .error("Relevant work experience should be less than total work experience.");
              isValidate = false;
              }
              if (selectedDurationYear == selectedExpYear) {
              if (selectedDurationMonth > selectedExpMonth) {

              // adding the message in the properties file.
              facesMessages.addFromResourceBundle("relevantexplessthantotal",
              FacesMessage.SEVERITY_INFO, "relevantexplessthantotal",
              new Object[] {});

              // adding the information in the log file.
              log
              .error("Relevant work experience should be less than total work experience.");
              isValidate = false;
              }
              }


              if (applicant.getAttachedResume() != null) {
              if (applicant.getAttachedResume().length > 54857) {
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "overload", applicant.getAttachedResumeName());
              log.info("File size more than 50 kb");
              isValidate = false;
              }
              }

              //Check if file name is edited or not
              if (applicant.getAttachedResumeName().length()>0&&applicant.getAttachedResume()==null) {

              if(!(new File(applicant.getAttachedResumeName().trim()).exists()))
              {
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "The file path specified doesnt exist");
              isValidate = false;
              return isValidate;
              }
              }



              return isValidate;
              }

              /**
              * This method is used to register/update an employee to access ERP program.
              *
              * @return status
              */
              public String register() {

              applicant.setEmployee(employee);
              UserMaster userMaster = null;
              String status = null;
              String message = null;
              boolean saveOrUpdate = false;

              try {

              /*
              * calling the validate method to check applicant is satisfied all
              * the requirements before persisting
              */
              if (validate()) {

              /*
              * check it is registered applicant or not. if it is new
              * applicant then persisting user master object.
              */
              if (applicant.getId() == 0) {
              saveOrUpdate = true;
              applicant.setStatus(true);
              applicant.setCreatedOn(new Date());
              userMaster = new UserMaster();
              userMaster.setUserName(applicant.getEmail());
              userMaster.setUserType(userTypeAction
              .getUserTypeByName(Constants.USER_EMPLOYEE));
              vedaenterpriseDatabase.save(userMaster);

              } else {
              saveOrUpdate = false;
              checkResume();
              this.applicant = (Applicant) vedaenterpriseDatabase
              .merge(this.applicant);
              }

              /* set the corresponding message based on saved or updated */
              message = (applicant.getId() == 0) ? "saved" : "updated";

              // Task ID: 6560
              applicant = (Applicant) vedaenterpriseDatabase.merge(applicant);

              /* persisting applicant object into the database. */
              vedaenterpriseDatabase.saveOrUpdate(applicant);
              vedaenterpriseDatabase.flush();
              vedaenterpriseDatabase.evict(applicant);
              if(!saveOrUpdate){
              applicant = (Applicant)vedaenterpriseDatabase.load(Applicant.class, applicant.getId());
              vedaenterpriseDatabase.refresh(applicant );
              }else{
              FacesContext ctx = FacesContext.getCurrentInstance();

              HttpServletRequest request = (HttpServletRequest) ctx
              .getExternalContext().getRequest();

              employee = new Employee();
              request.getSession().removeAttribute("applicant");

              }

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              message, new Object[] { applicant.getEmail() });

              /*
              * Log is used to display the information applicant is persist
              * or not.
              */
              log.info(" #{applicant.email} Successfully saved. ");
              status = Constants.NAVIGATION_STATUS_SUCCESS;
              } else {
              status = Constants.NAVIGATION_STATUS_FAILURE;
              }
              } catch (Exception e) {

              /* Log is used to display the catch exception. */
              facesMessages.add(FacesMessage.SEVERITY_ERROR, "Exception occured : " + e.getMessage());
              log.error("Exception when implementing register() method in ERPAction class "
              + e.getMessage());
              status = Constants.NAVIGATION_STATUS_FAILURE;
              }
              // this.applicant = null;
              // this.employee = null;
              return status;
              }

              /**
              * This method load the Applicant object and set the old resume if new
              * resume is not uploaded.
              *
              * @return
              */
              private void checkResume() {

              Applicant loadApplicant = null;

              /* loading the Applicant object */
              loadApplicant = (Applicant) vedaenterpriseDatabase.load(
              Applicant.class, new Integer(applicant.getId()));

              /* check the length of the resume name */
              if (!(applicant.getAttachedResumeName().length() > 0)) {

              /* load the persisted Resume. */
              applicant.setAttachedResumeName(loadApplicant
              .getAttachedResumeName());
              applicant.setAttachedResume(loadApplicant.getAttachedResume());
              applicant
              .setResumeContentType(loadApplicant.getResumeContentType());
              }
              }

              /**
              * This method is used to apply for a job for internal employee in IJP
              * program.
              *
              * @return status
              */
              public String applyJob() {

              String status = null;
              Long count;
              List jobs;

              /* check applicant is logged in or not */
              if (applicant.getId() > 0) {

              /* query to check applicant is already applied for this job or not */
              if ((Long) vedaenterpriseDatabase.createQuery(
              " SELECT COUNT(*) FROM "
              + DatabaseTables.JOB_APPLICATION_CLASS
              + " JA WHERE JA.applicant = " + applicant.getId()
              + " AND JA.job = " + job.getId()).uniqueResult() == 0) {

              /*
              * initializing the object setting the field value for
              * jobApplication object and persisting it into the database.
              */
              // Task ID: 7104
              if(register().equals("success")){
              jobApplication = new JobApplication();
              jobApplication.setAppliedBy(currentUserMaster);
              jobApplication.setApplicantId(applicant);
              jobApplication.setAppliedDate(new Date());
              jobApplication.setJob(job);
              vedaenterpriseDatabase.save(jobApplication);

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "applied", new Object[] { applicant.getEmail() });

              /*
              * Log is used to display the information applicant is applied
              * or not.
              */
              log.info(" Successfully applied ");
              status = Constants.NAVIGATION_STATUS_SUCCESS;
              }else{

              status = Constants.NAVIGATION_STATUS_FAILURE;
              }
              } else {
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "alreadyApplied",
              new Object[] { applicant.getEmail() });
              status = Constants.NAVIGATION_STATUS_FAILURE;
              }
              } else {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "login");

              /*
              * Log is used to display the information applicant is logged in or
              * not.
              */
              log.info(" You are not loged in, first login they access jobs. ");
              status = Constants.NAVIGATION_STATUS_FAILURE;
              }
              jobApplication = null;
              return status;
              }

              /**
              * This method is used to show the image at the time of edit only.
              *
              * @return Returns the visible.
              */
              public boolean isVisible() {
              return applicant.getAttachedResume() == null ? false : true;
              }

              /**
              * This method is used to download the resume of the applicant.
              *
              * @return
              */
              public void downloadFileContent() {

              /* access downloadFileContent() method from util class */
              Util.downloadFileContent(FacesContext.getCurrentInstance(), applicant
              .getAttachedResume(), applicant.getAttachedResumeName(),
              applicant.getResumeContentType());
              }

              /**
              * This method is used for navigation purpose.
              *
              * @return status
              */
              public String updateRegister() {

              /*
              * get the employee object to display employee information at the update
              * time
              */
              update = true;
              apply = false;
              isFromERPUpdate = true;
              employee = applicant.getEmployee();
              this.confirmPassword = applicant.getPassword();

              return Constants.NAVIGATION_STATUS_SUCCESS;
              }

              /**
              * This method is method is used for navigation purpose.
              *
              * @return status
              */
              public String flushRegister() {
              confirmPassword = null;
              isFromERPUpdate = true;
              return Constants.NAVIGATION_STATUS_SUCCESS;
              }



              /**
              * This method is used to set the current date to display on the referral
              * page.
              *
              * @return
              */
              public String accessJobToApply() {

              String status = null;

              /* get the employee object to display employee information */
              if (applicant.getId() != 0) {
              apply = true;
              update = false;
              isFromERPUpdate = false;
              this.employee = applicant.getEmployee();
              this.confirmPassword = applicant.getPassword();
              applicant.setEmployee(employee);
              this.applicant = (Applicant) vedaenterpriseDatabase
              .merge(applicant);
              status = Constants.NAVIGATION_STATUS_ACCESS_JOB_TO_APPLY;
              } else {

              /*
              * faceMessages is used to display the message from the resource
              * bundle property file.
              */
              apply = false;
              facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO,
              "login");

              /*
              * Log is used to display the information applicant is logged in or
              * not.
              */
              log.info(" You are not loged in, first login they access jobs. ");
              status = Constants.NAVIGATION_STATUS_RETURN_ERP_HOME;
              }
              return status;
              }

              /**
              * This method is used to go back to the home page.
              *
              * @return status
              */
              public String cancel() {
              if (isFromERPUpdate) {
              isFromERPHome = false;
              return Constants.NAVIGATION_STATUS_CANCEL;
              } else {
              return Constants.NAVIGATION_STATUS_CANCEL_TO_JOB;
              }
              }

              /**
              * This method is used to go back to the home page.
              *
              * @return
              */
              public String returnHome() {
              this.job = null;

              if(isFromERPHome){
              isFromERPHome = false;
              return Constants.NAVIGATION_STATUS_RETURN_ERP_HOME;
              }

              /* check applicant id job application id is 0 or not */
              if (applicant.getId() != 0 && jobApplication.getId() != 0) {
              this.jobApplication = null;
              return Constants.NAVIGATION_STATUS_RETURN_TO_APPLIED_JOB;
              } else{
              return Constants.NAVIGATION_STATUS_RETURN;
              }
              }

              /**
              * This method is used to merge the job object and navigation
              *
              * @return
              */
              public String jobDetail(Job hotJob) {
              isFromERPHome = true;
              this.job = (Job) vedaenterpriseDatabase.merge(hotJob);
              return Constants.NAVIGATION_STATUS_SEARCH_SUCCESS;
              }

              /**
              * @return Returns the confirmPassword.
              */
              public String getConfirmPassword() {
              return confirmPassword;
              }

              /**
              * @param confirmPassword
              * The confirmPassword to set.
              */
              public void setConfirmPassword(String confirmPassword) {
              this.confirmPassword = confirmPassword;
              }

              /**
              * @return Returns the selectedHighestQualification.
              */
              public int getSelectedHighestQualification() {

              /* check employee is logged in or not */
              if (employee.getId() != 0 && employee.getHighestQualification() != null) {
              return employee.getHighestQualification().getId();
              } else {
              return selectedHighestQualification;
              }
              }

              /**
              * @param selectedHighestQualification
              * The selectedHighestQualification to set.
              */
              public void setSelectedHighestQualification(int selectedHighestQualification) {

              DictionaryValue highestQualificationdictionaryValue;

              /* set the dictionary value id */
              highestQualificationdictionaryValue = new DictionaryValue();
              highestQualificationdictionaryValue.setId(selectedHighestQualification);
              employee.setHighestQualification(highestQualificationdictionaryValue);
              this.selectedHighestQualification = selectedHighestQualification;
              }

              /**
              * @return Returns the selectedDivision.
              */
              public int getSelectedDivision() {

              /* check employee is logged in or not */
              if (employee.getId() != 0 && employee.getDivision() != null) {
              return employee.getDivision().getId();
              } else {
              return selectedDivision;
              }
              }

              /**
              * @param selectedDivision
              * The selectedDivision to set.
              */
              public void setSelectedDivision(int selectedDivision) {

              DictionaryValue divisionDictionaryValue;

              /* set the dictionary value id */
              divisionDictionaryValue = new DictionaryValue();
              divisionDictionaryValue.setId(selectedDivision);
              employee.setDivision(divisionDictionaryValue);
              this.selectedDivision = selectedDivision;
              }

              /**
              * @return Returns the selectedDurationMonth.
              */
              public int getSelectedDurationMonth() {

              /* check employee is logged in or not */
              if (employee.getId() != 0 && employee.getTotalDurationMonth() != null) {
              return employee.getTotalDurationMonth().getId();
              } else {
              return selectedDurationMonth;
              }
              }

              /**
              * @param selectedDurationMonth
              * The selectedDurationMonth to set.
              */
              public void setSelectedDurationMonth(int selectedDurationMonth) {

              /* creating the dictionaryValue object to set the dictionary value */
              DictionaryValue durationMonthDictionaryValue;

              /*
              * check dictionaryValue is 0 or not if (selectedDurationMonth == 0) {
              * employee.setTotalDurationMonth(null); } else {
              *
              * set the dictionary value id durationMonthDictionaryValue = new
              * DictionaryValue();
              * durationMonthDictionaryValue.setId(selectedDurationMonth);
              * employee.setTotalDurationMonth(durationMonthDictionaryValue); } }
              */

              if (selectedDurationMonth > 0) {
              durationMonthDictionaryValue = (DictionaryValue) vedaenterpriseDatabase
              .get(DictionaryValue.class, selectedDurationMonth);
              if (durationMonthDictionaryValue != null) {
              employee.setTotalDurationMonth(durationMonthDictionaryValue);
              } else {
              facesMessages.instance().addFromResourceBundle(
              FacesMessage.SEVERITY_INFO, "norecord");
              log.error("could not set: Record may be deleted");
              }
              }
              this.selectedDurationMonth = selectedDurationMonth;

              }

              /**
              * @return Returns the selectedDurationYear.
              */
              public int getSelectedDurationYear() {

              /* check employee is logged in or not */
              if (employee.getId() != 0 && employee.getTotalDurationYear() != null) {
              return employee.getTotalDurationYear().getId();
              } else {
              return selectedDurationYear;
              }
              }

              /**
              * @param selectedDurationYear
              * The selectedDurationYear to set.
              */
              public void setSelectedDurationYear(int selectedDurationYear) {

              /* creating the dictionaryValue object to set the dictionary value */
              DictionaryValue durationYearDictionaryValue;

              /*
              * check dictionaryValue is 0 or not if (selectedDurationYear == 0) {
              * employee.setTotalDurationYear(null); } else {
              *
              * set the dictionary value id durationYearDictionaryValue = new
              * DictionaryValue();
              * durationYearDictionaryValue.setId(selectedDurationYear);
              * employee.setTotalDurationYear(durationYearDictionaryValue); } }
              */

              if (selectedDurationYear > 0) {
              durationYearDictionaryValue = (DictionaryValue) vedaenterpriseDatabase
              .get(DictionaryValue.class, selectedDurationYear);
              if (durationYearDictionaryValue != null) {
              employee.setTotalDurationYear(durationYearDictionaryValue);
              } else {
              facesMessages.instance().addFromResourceBundle(
              FacesMessage.SEVERITY_INFO, "norecord");
              log.error("could not set: Record may be deleted");
              }
              }
              this.selectedDurationYear = selectedDurationYear;

              }

              /**
              * @return Returns the selectedExpMo

              • 4. Re: Junk characters after validation.
                muralikri_bng

                Hi Devon

                Did you have look at my code.. ?

                Pls let me know if u need anything else.

                Thx
                Murali

                • 5. Re: Junk characters after validation.
                  pmuir

                  You'll need to reduce your code down to a simple test case and post that. Far too much information to parse here.