Spring Form嵌套对象布尔字段未得到解析

时间:2017-03-19 06:12:30

标签: java spring spring-mvc spring-boot spring-form

我有一个Employee类,它将PersonalDetails类对象作为成员

public class Employee {

private long empId;

private PersonalDetails personalDetails = new PersonalDetails();
// getters setters

PersonalDetails类如下

/**
 * Class represents personal details of an employee
 *
 * <BR>
 * <BR>
 * <B>Supported API: </B>false <BR>
 * <BR>
 * <B>Extendable: </B>false
 */
public class PersonalDetails {

private String empfirstName, empMiddleName, empLastName, gender, birthPlace, marritalStatus,
        longMedicalTreatmentDescription, suffix, ethnicity, veteranStatus, prefFirstName, preLastName, birthCountry,
        citizenship, citizenshipCountry1, citizenshipCountry2, visaType, email;

private Address permanentAddress, presentAddress;

private OtherContactDetails emergencyContactDetails;

private Date dob, visaExp;

private int age, noOfChildrens, healthVision;

private Boolean hasPhysicalDisability, hadLongMedicalTreatment, hasFourWheelLiscence, isPresentAddressSame;

private Passport passportDetails;

private FatherOrHusband fatherOrHusbandDetails;

/**
 * @return the empfirstName
 */
public String getEmpfirstName() {
    return empfirstName;
}

/**
 * @param empfirstName
 *            the empfirstName to set
 */
public void setEmpfirstName(String empfirstName) {
    this.empfirstName = empfirstName;
}

/**
 * @return the empMiddleName
 */
public String getEmpMiddleName() {
    return empMiddleName;
}

/**
 * @param empMiddleName
 *            the empMiddleName to set
 */
public void setEmpMiddleName(String empMiddleName) {
    this.empMiddleName = empMiddleName;
}

/**
 * @return the empLastName
 */
public String getEmpLastName() {
    return empLastName;
}

/**
 * @param empLastName
 *            the empLastName to set
 */
public void setEmpLastName(String empLastName) {
    this.empLastName = empLastName;
}

/**
 * @return the gender
 */
public String getGender() {
    return gender;
}

/**
 * @param gender
 *            the gender to set
 */
public void setGender(String gender) {
    this.gender = gender;
}

/**
 * @return the birthPlace
 */
public String getBirthPlace() {
    return birthPlace;
}

/**
 * @param birthPlace
 *            the birthPlace to set
 */
public void setBirthPlace(String birthPlace) {
    this.birthPlace = birthPlace;
}

/**
 * @return the marritalStatus
 */
public String getMarritalStatus() {
    return marritalStatus;
}

/**
 * @param marritalStatus
 *            the marritalStatus to set
 */
public void setMarritalStatus(String marritalStatus) {
    this.marritalStatus = marritalStatus;
}

/**
 * @return the longMedicalTreatmentDescription
 */
public String getLongMedicalTreatmentDescription() {
    return longMedicalTreatmentDescription;
}

/**
 * @param longMedicalTreatmentDescription
 *            the longMedicalTreatmentDescription to set
 */
public void setLongMedicalTreatmentDescription(String longMedicalTreatmentDescription) {
    this.longMedicalTreatmentDescription = longMedicalTreatmentDescription;
}

/**
 * @return the permanentAddress
 */
public Address getPermanentAddress() {
    return permanentAddress;
}

/**
 * @param permanentAddress
 *            the permanentAddress to set
 */
public void setPermanentAddress(Address permanentAddress) {
    this.permanentAddress = permanentAddress;
}

/**
 * @return the presentAddress
 */
public Address getPresentAddress() {
    return presentAddress;
}

/**
 * @param presentAddress
 *            the presentAddress to set
 */
public void setPresentAddress(Address presentAddress) {
    this.presentAddress = presentAddress;
}

/**
 * @return the dob
 */
public Date getDob() {
    return dob;
}

/**
 * @param dob
 *            the dob to set
 */
public void setDob(Date dob) {
    this.dob = dob;
}

/**
 * @return the age
 */
public int getAge() {
    return age;
}

/**
 * @param age
 *            the age to set
 */
public void setAge(int age) {
    this.age = age;
}

/**
 * @return the noOfChildrens
 */
public int getNoOfChildrens() {
    return noOfChildrens;
}

/**
 * @param noOfChildrens
 *            the noOfChildrens to set
 */
public void setNoOfChildrens(int noOfChildrens) {
    this.noOfChildrens = noOfChildrens;
}

/**
 * @return the healthVision
 */
public int getHealthVision() {
    return healthVision;
}

/**
 * @param healthVision
 *            the healthVision to set
 */
public void setHealthVision(int healthVision) {
    this.healthVision = healthVision;
}

/**
 * @return the passportDetails
 */
public Passport getPassportDetails() {
    return passportDetails;
}

/**
 * @param passportDetails
 *            the passportDetails to set
 */
public void setPassportDetails(Passport passportDetails) {
    this.passportDetails = passportDetails;
}

/**
 * @return the suffix
 */
public String getSuffix() {
    return suffix;
}

/**
 * @param suffix
 *            the suffix to set
 */
public void setSuffix(String suffix) {
    this.suffix = suffix;
}

/**
 * @return the fatherOrHusbandDetails
 */
public FatherOrHusband getFatherOrHusbandDetails() {
    return fatherOrHusbandDetails;
}

/**
 * @param fatherOrHusbandDetails
 *            the fatherOrHusbandDetails to set
 */
public void setFatherOrHusbandDetails(FatherOrHusband fatherOrHusbandDetails) {
    this.fatherOrHusbandDetails = fatherOrHusbandDetails;
}

/**
 * @return the hasPhysicalDisability
 */
public Boolean isHasPhysicalDisability() {
    return hasPhysicalDisability;
}

/**
 * @param hasPhysicalDisability
 *            the hasPhysicalDisability to set
 */
public void setHasPhysicalDisability(Boolean hasPhysicalDisability) {
    this.hasPhysicalDisability = hasPhysicalDisability;
}

/**
 * @return the hadLongMedicalTreatment
 */
public Boolean isHadLongMedicalTreatment() {
    return hadLongMedicalTreatment;
}

/**
 * @param hadLongMedicalTreatment
 *            the hadLongMedicalTreatment to set
 */
public void setHadLongMedicalTreatment(Boolean hadLongMedicalTreatment) {
    this.hadLongMedicalTreatment = hadLongMedicalTreatment;
}

/**
 * @return the hasFourWheelLiscence
 */
public Boolean isHasFourWheelLiscence() {
    return hasFourWheelLiscence;
}

/**
 * @param hasFourWheelLiscence
 *            the hasFourWheelLiscence to set
 */
public void setHasFourWheelLiscence(Boolean hasFourWheelLiscence) {
    this.hasFourWheelLiscence = hasFourWheelLiscence;
}

/**
 * @return the isPresentAddressSame
 */
public Boolean isPresentAddressSame() {
    return isPresentAddressSame;
}

/**
 * @param isPresentAddressSame
 *            the isPresentAddressSame to set
 */
public void setPresentAddressSame(Boolean isPresentAddressSame) {
    if (isPresentAddressSame) {
        presentAddress = permanentAddress;
    }
    this.isPresentAddressSame = isPresentAddressSame;
}

/**
 * @return the ethnicity
 */
public String getEthnicity() {
    return ethnicity;
}

/**
 * @param ethnicity
 *            the ethnicity to set
 */
public void setEthnicity(String ethnicity) {
    this.ethnicity = ethnicity;
}

/**
 * @return the veteranStatus
 */
public String getVeteranStatus() {
    return veteranStatus;
}

/**
 * @param veteranStatus
 *            the veteranStatus to set
 */
public void setVeteranStatus(String veteranStatus) {
    this.veteranStatus = veteranStatus;
}

/**
 * @return the prefFirstName
 */
public String getPrefFirstName() {
    return prefFirstName;
}

/**
 * @param prefFirstName
 *            the prefFirstName to set
 */
public void setPrefFirstName(String prefFirstName) {
    this.prefFirstName = prefFirstName;
}

/**
 * @return the preLastName
 */
public String getPreLastName() {
    return preLastName;
}

/**
 * @param preLastName
 *            the preLastName to set
 */
public void setPreLastName(String preLastName) {
    this.preLastName = preLastName;
}

/**
 * @return the birthCountry
 */
public String getBirthCountry() {
    return birthCountry;
}

/**
 * @param birthCountry
 *            the birthCountry to set
 */
public void setBirthCountry(String birthCountry) {
    this.birthCountry = birthCountry;
}

/**
 * @return the citizenship
 */
public String getCitizenship() {
    return citizenship;
}

/**
 * @param citizenship
 *            the citizenship to set
 */
public void setCitizenship(String citizenship) {
    this.citizenship = citizenship;
}

/**
 * @return the citizenshipCountry1
 */
public String getCitizenshipCountry1() {
    return citizenshipCountry1;
}

/**
 * @param citizenshipCountry1
 *            the citizenshipCountry1 to set
 */
public void setCitizenshipCountry1(String citizenshipCountry1) {
    this.citizenshipCountry1 = citizenshipCountry1;
}

/**
 * @return the citizenshipCountry2
 */
public String getCitizenshipCountry2() {
    return citizenshipCountry2;
}

/**
 * @param citizenshipCountry2
 *            the citizenshipCountry2 to set
 */
public void setCitizenshipCountry2(String citizenshipCountry2) {
    this.citizenshipCountry2 = citizenshipCountry2;
}

/**
 * @return the visaType
 */
public String getVisaType() {
    return visaType;
}

/**
 * @param visaType
 *            the visaType to set
 */
public void setVisaType(String visaType) {
    this.visaType = visaType;
}

/**
 * @return the emergencyContactDetails
 */
public OtherContactDetails getEmergencyContactDetails() {
    return emergencyContactDetails;
}

/**
 * @param emergencyContactDetails
 *            the emergencyContactDetails to set
 */
public void setEmergencyContactDetails(OtherContactDetails emergencyContactDetails) {
    this.emergencyContactDetails = emergencyContactDetails;
}

/**
 * @return the visaExp
 */
public Date getVisaExp() {
    return visaExp;
}

/**
 * @param visaExp
 *            the visaExp to set
 */
public void setVisaExp(Date visaExp) {
    this.visaExp = visaExp;
}

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

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

/*
 * (non-Javadoc)
 *
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
    return "PersonalDetails [empfirstName=" + empfirstName + ", empMiddleName=" + empMiddleName + ", empLastName="
            + empLastName + ", gender=" + gender + ", birthPlace=" + birthPlace + ", marritalStatus="
            + marritalStatus + ", longMedicalTreatmentDescription=" + longMedicalTreatmentDescription + ", suffix="
            + suffix + ", ethnicity=" + ethnicity + ", veteranStatus=" + veteranStatus + ", prefFirstName="
            + prefFirstName + ", preLastName=" + preLastName + ", birthCountry=" + birthCountry + ", citizenship="
            + citizenship + ", citizenshipCountry1=" + citizenshipCountry1 + ", citizenshipCountry2="
            + citizenshipCountry2 + ", visaType=" + visaType + ", email=" + email + ", permanentAddress="
            + permanentAddress + ", presentAddress=" + presentAddress + ", emergencyContactDetails="
            + emergencyContactDetails + ", dob=" + dob + ", visaExp=" + visaExp + ", age=" + age
            + ", noOfChildrens=" + noOfChildrens + ", healthVision=" + healthVision + ", hasPhysicalDisability="
            + hasPhysicalDisability + ", hadLongMedicalTreatment=" + hadLongMedicalTreatment
            + ", hasFourWheelLiscence=" + hasFourWheelLiscence + ", isPresentAddressSame=" + isPresentAddressSame
            + ", passportDetails=" + passportDetails + ", fatherOrHusbandDetails=" + fatherOrHusbandDetails + "]";
}

}

我使用spring form标签创建注册表单并添加如下代码

<label>
    <form:checkbox path="personalDetails.isPresentAddressSame" />
    Present address same as above
</label>

由于我有一个变量personalDetails并且它有一个字段isPresentAddressSame,它应该与getter setter匹配,但我收到了以下错误

There was an unexpected error (type=Internal Server Error, status=500).
Invalid property 'personalDetails.isPresentAddressSame' of bean class [com.hr.foundation.models.doc.models.employee.Employee]: Bean property 'personalDetails.isPresentAddressSame' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

类型为String的其他字段与personalDetails.firstName之类的路径匹配,但不匹配此布尔字段

2 个答案:

答案 0 :(得分:0)

你没有包含PersonalDetails类的getter / setter,但Spring说这就是错误所在。

确保您拥有以下内容:

boolean isPresentAddressSame() { ... }

void setPresentAddressSame(boolean value) { ... }

你的错误可能是:

  1. 您在参数或返回类型中使用Boolean(请注意大写B

  2. 您使用的getPresentAddressame仅允许Boolean(再次注明资本B),而不是isPresentAddressSameboolean (小B)。

  3. <强>澄清

    变化:

    public Boolean isPresentAddressSame() {
        return isPresentAddressSame;
    }
    
    public void setPresentAddressSame(Boolean isPresentAddressSame) {
        if (isPresentAddressSame) {
            presentAddress = permanentAddress;
        }
        this.isPresentAddressSame = isPresentAddressSame;
    }
    

    为:

    public boolean isPresentAddressSame() {
        return isPresentAddressSame;
    }
    
    public void setPresentAddressSame(boolean isPresentAddressSame) {
        if (isPresentAddressSame) {
            presentAddress = permanentAddress;
        }
        this.isPresentAddressSame = isPresentAddressSame;
    }
    

    再次注意,此处的boolean使用较小的b

答案 1 :(得分:0)

尝试更改方法的签名:

public Boolean isPresentAddressSame() {
return isPresentAddressSame;

}

public Boolean getPresentAddressSame() {
return isPresentAddressSame;

}

如果您使用的是Spring,Spring会寻找 get 单词来解析bean的属性。