2015-11-04 98 views
0

我可以爲一個模型設置一個單獨的路徑名,但是如果我嘗試爲另一個模型內的模型設置路徑,則會引發錯誤。我堅持這種友好給我一個解決方案,如果你詳細說明我要去哪裏工作,並且最好的地方在哪裏瞭解更多,這將是非常慷慨的。如何在另一個模型中設置模型屬性的形式:路徑

我想和大家分享我的代碼把它解決

THIS IS MY控制器

@RequestMapping(value="contact", method=RequestMethod.GET) 
public String contactability(HttpServletRequest request, HttpServletResponse response, Model model, @ModelAttribute("contactDetails") ContactDetails contactDetails){ 
    try{ 
     if(contactDetails==null){ 
      contactDetails= new ContactDetails(); 
     } 
     model.addAttribute("contactabality", contactDetails); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    return "contactabality"; 

} 

這都是我的模型

我有兩個型號involed

  1. 聯繫方式是代碼

    @Entity 
    @Table(name="TB_CONTACT_DETAILS") 
    public class ContactDetails implements Serializable { 
    
    @Id 
    @GeneratedValue 
    @Column(name="CONTACT_ID") 
    private Long contactId; 
    
    @Column(name="IS_PERM_COMM_SAME") 
    private Integer isPermCommSame; 
    
    @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL, mappedBy="contactDetails") 
    private Set<AddressDetails> addressDetails = new HashSet<AddressDetails>(); 
    
    public ContactDetails() { 
        // TODO Auto-generated constructor stub 
    } 
    
    public Long getContactId() { 
        return contactId; 
    } 
    
    public void setContactId(Long contactId) { 
        this.contactId = contactId; 
    } 
    
    public Integer getIsPermCommSame() { 
        return isPermCommSame; 
    } 
    
    public void setIsPermCommSame(Integer isPermCommSame) { 
        this.isPermCommSame = isPermCommSame; 
    } 
    
    public Set<AddressDetails> getAddressDetails() { 
        return addressDetails; 
    } 
    
    public void setAddressDetails(Set<AddressDetails> addressDetails) { 
        this.addressDetails = addressDetails; 
    } 
    

    }

  2. 是地址模式,下面是它

    @Entity 
    @Table(name="TB_ADDRESS_DETAILS") 
    public class AddressDetails implements Serializable{ 
    
    @Id 
    @GeneratedValue 
    @Column(name="ADDRESS_ID") 
    private Long addrId; 
    
    @ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.DETACH) 
    @JoinColumn(name="ADDR_TYPE") 
    private AddressTypeMaster addressType; 
    
    @Column(name="ADDRESS_COL1") 
    private String addrCol1; 
    
    @Column(name="ADDRESS_COL2") 
    private String addrCol2; 
    
    @Column(name="ADDRESS_COL3") 
    private String addrCol3; 
    
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.DETACH) 
    @JoinColumn(name="CITY") 
    private CityMaster city; 
    
    @Column(name="PINCODE") 
    private String pincode; 
    
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.DETACH) 
    @JoinColumn(name="STATE") 
    private StateMaster state ; 
    
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL) 
    @JoinColumn(name="CONTACT_ID") 
    private ContactDetails contactDetails; 
    
    @Column(name="ADDR_STATUS") 
    private String addrStatus; 
    
    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="addressDetails") 
    private EmployeeDetails employeeDetails; 
    
    public AddressDetails() { 
        // TODO Auto-generated constructor stub 
    } 
    
    public Long getAddrId() { 
        return addrId; 
    } 
    
    public void setAddrId(Long addrId) { 
        this.addrId = addrId; 
    } 
    
    public AddressTypeMaster getAddressType() { 
        return addressType; 
    } 
    
    public void setAddressType(AddressTypeMaster addressType) { 
        this.addressType = addressType; 
    } 
    
    
    public String getAddrCol1() { 
        return addrCol1; 
    } 
    
    public void setAddrCol1(String addrCol1) { 
        this.addrCol1 = addrCol1; 
    } 
    
    public String getAddrCol2() { 
        return addrCol2; 
    } 
    
    public void setAddrCol2(String addrCol2) { 
        this.addrCol2 = addrCol2; 
    } 
    
    public String getAddrCol3() { 
        return addrCol3; 
    } 
    
    public void setAddrCol3(String addrCol3) { 
        this.addrCol3 = addrCol3; 
    } 
    
    public CityMaster getCity() { 
        return city; 
    } 
    
    public void setCity(CityMaster city) { 
        this.city = city; 
    } 
    
    public String getPincode() { 
        return pincode; 
    } 
    
    public void setPincode(String pincode) { 
        this.pincode = pincode; 
    } 
    
    public StateMaster getState() { 
        return state; 
    } 
    
    public void setState(StateMaster state) { 
        this.state = state; 
    } 
    
    public ContactDetails getContactDetails() { 
        return contactDetails; 
    } 
    
    public void setContactDetails(ContactDetails contactDetails) { 
        this.contactDetails = contactDetails; 
    } 
    
    public String getAddrStatus() { 
        return addrStatus; 
    } 
    
    public void setAddrStatus(String addrStatus) { 
        this.addrStatus = addrStatus; 
    } 
    
    public EmployeeDetails getEmployeeDetails() { 
        return employeeDetails; 
    } 
    
    public void setEmployeeDetails(EmployeeDetails employeeDetails) { 
        this.employeeDetails = employeeDetails; 
    } 
    

    }

代碼THIS IS MY JSP

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 

<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<title>Generic Tool For Employee</title> 
<meta name="description" content=""> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<!-- Place favicon.ico and apple-touch-icon.png in the root directory --> 

<link rel="stylesheet" href="layout/css/bootstrap.min.css"> 
<link rel="stylesheet" href="layout/css/validator/screen.css"> 
<link rel="stylesheet" href="layout/datepicker/css/bootstrap-datepicker3.min.css"> 
<link rel="stylesheet" href="layout/css/index.css"> 

    <div class="container-fluid"> 
     <h2>Contact Details</h2> 
     <form:form commandName="contactabality" class="form-horizontal" id="contactDetailsForm" role="form" method="POST" action="persDetails"> 
      <div class="panel panel-default"> 
       <div class="panel-heading"> 
        <h4 class="panel-title">Address Details</h4> 
       </div> 
       <div class="panel-body"> 
        <div class="col-sm-6"> 
       <!--COMMUNICATION ADDRESS DETAILS--> 
        <h3 class="page-header">COMMUNICATION ADDRESS DETAILS</h3> 
         <div class="form-group"> 
          <label class="col-sm-4 control-label">Address 1<span class="mandatoryRed">*</span></label> 
          <div class="col-sm-8"> 
           <form:input path="addressDetails.addrCol1" type="text" class="form-control" placeholder="Address 1" name="commAddr1" id="commAddr1"/> 
          </div> 
         </div> 
     <%--     <div class="form-group"> 
          <label class="col-sm-4 control-label">Address 2</label> 
          <div class="col-sm-8"> 
           <form:input path="addressDetails.addrCol2" type="text" class="form-control" placeholder="Address 2" name="commAddr2" id="commAddr2"/> 
          </div> 
         </div> 
         <div class="form-group"> 
          <label class="col-sm-4 control-label">Address 3</label> 
          <div class="col-sm-8"> 
           <form:input path="addressDetails.addrCol3" type="text" class="form-control" placeholder="Address 3" name="commAddr3" id="commAddr3"/> 
          </div> 
         </div> 
         <div class="form-group"> 
          <label class="col-sm-4 control-label">City<span class="mandatoryRed">*</span></label> 
          <div class="col-sm-8"> 
           <form:select path="addressDetails.city.cityId" class="form-control" name="commAddrCity" id="commAddrCity"> 
            <form:options items="${cities}"/> 
           </form:select> 
          </div> 
         </div> 
         <div class="form-group"> 
          <label class="col-sm-4 control-label">State<span class="mandatoryRed">*</span></label> 
          <div class="col-sm-8"> 
           <form:select path="addressDetails.state.stateId" class="form-control" name="commAddrState" id="commAddrState"> 
            <form:options items="${states}" /> 
           </form:select> 
          </div> 
         </div> 
         <div class="form-group"> 
          <label class="col-sm-4 control-label">Pincode<span class="mandatoryRed">*</span></label> 
          <div class="col-sm-8"> 
           <form:input path="addressDetails.pincode" type="text" class="form-control" placeholder="Pincode" name="commAddrPincode" id="commAddrPincode" maxlength="6"/> 
          </div> 
         </div> 
        </div> 
        <!--PERMANENT ADDRESS DETAILS--> 
        <div class="col-sm-6"> 
         <h4 class="page-header">PERMANENT ADDRESS DETAILS</h4> 
         <div class="form-group"> 
          <label class="col-sm-9">Is your permanent address same as communication address<span class="mandatoryRed">*</span></label> 
          <div class="col-sm-2"> 
           <div class="toggle-switch toggle-switch-success"> 
            <label> 
             <form:checkbox path="isPermCommSame" id="PermAddrCheck" type="checkbox" value="2"/> 
             <div class="toggle-switch-inner"></div> 
             <div class="toggle-switch-switch"><i class="fa fa-check"></i></div> 
            </label> 
           </div> 

          </div> 
         </div> 
         <div class="row permAddrClss"> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">Address 1<span class="mandatoryRed">*</span></label> 
           <div class="col-sm-8"> 
            <form:input path="addressDetails.addrCol1" type="text" class="form-control" placeholder="Address 1" name="PermAddr1" id="PermAddr1"/> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">Address 2</label> 
           <div class="col-sm-8"> 
            <form:input path="addressDetails.addrCol2" type="text" class="form-control" placeholder="Address 2" name="PermAddr2" id="PermAddr2"/> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">Address 3</label> 
           <div class="col-sm-8"> 
            <form:input path="addressDetails.addrCol3" type="text" path="addressDetails.addrCol3" class="form-control" placeholder="Address 3" name="PermAddr3" id="PermAddr3"/> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">City<span class="mandatoryRed">*</span></label> 
           <div class="col-sm-8"> 
            <form:select path="addressDetails.city.cityId" class="form-control" name="PermAddrCity" id="PermAddrCity"> 
             <form:options items="${cities}" /> 
            </form:select> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">State<span class="mandatoryRed">*</span></label> 
           <div class="col-sm-8"> 
            <form:select path="addressDetails.state.stateId" class="form-control" name="PermAddrState" id="PermAddrState"> 
             <form:options items="${states}"/> 
            </form:select> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="col-sm-4 control-label">Pincode<span class="mandatoryRed">*</span></label> 
           <div class="col-sm-8"> 
            <form:input path="addressDetails.pincode" type="text" class="form-control" placeholder="Pincode" name="PermAddrPincode" id="PermAddrPincode" maxlength="6"/> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div>--%> 
      <p> 
       <input class="submit btn btn-default" type="submit" value="Submit"> 
      </p> 
     </form:form> 
    </div> 

    <!-- SCRIPTS --> 
    <script src="layout/js/vendors/jquery-1.9.1.min.js"></script> 
    <script src="layout/js/vendors/jquery.validate.min.js"></script> 
    <script src="layout/js/vendors/bootstrap-3.3.5.js"></script> 
    <script src="layout/datepicker/js/bootstrap-datepicker.min.js"></script> 
    <script src="layout/js/index.js"></script> 
    <script src="layout/js/contactabality.js"></script> 

我得到的誤差是

4:46:。。34916 ERROR [org.apache.catalina.core.ContainerBase [jboss.web] [缺省主機] [/ EOB-幅] [JSP ]](http-localhost/127.0.0.1:8080-5)JBWEB000236:servlet jsp的Servlet.service()拋出異常:org.springframework.beans.NotReadablePropertyException:bean類[com.rectrix的無效屬性'addressDetails.addrCol1' .eob.models.ContactDetails]:Bean屬性 'addressDetails.addrCol1' 不是可讀或有一個無效getter方法:是否返回類型

AND

14:46:34,922錯誤[org.apache.catalina.core.ContainerBase。[jboss.web]。[default-host]。[/ eob-web]。[jsp]](http-localhost/127.0.0.1 :8080-5)JBWEB000236:servlet jsp的Servlet.service()拋出異常:org.apache.tiles.util.TilesIOException:包含路徑'/WEB-INF/views/jsp/contactabality.jsp'的JSPException。

請幫我弄清楚這一點。 謝謝

回答

1
private Set<AddressDetails> addressDetails = new HashSet<AddressDetails>(); 

是你的問題。我相信你會在上面的列表中只存儲兩種地址,我建議你綁定永久通訊地址詳細信息作爲單獨的屬性,而不是綁定爲列表。

一些東西像ContactDetails@Transient private AddressDetails commAddressDetails@Transient private AddressDetails permAddressDetails創建兩個以上Transient屬性和對應的setter /吸氣。

在你的Jsp中使用這些屬性的各個字段之前,堅持寫自己的邏輯來構造one-to-many的關係。如果你有靜態的地址數量,這將工作。

+0

我很感謝你幫助我的時間,謝謝你。我的其他模型也以相同的方式開發,例如。我有employeeExp模型,其中包含我有公司名稱的pastExp屬性。所以用戶試圖從employee exp設置的名字應該放在pastExp的公司名稱中。爲此在employeeExp的jsp中,我給出了一個公司名稱爲pastExp.companyName的路徑。在這種情況下,我需要這樣做,但我得到了上面顯示的相同錯誤。如何解決這個問題。 –

+0

在這種情況下,您的視圖設計如何? - 這個答案可能對你有幫助。 http://stackoverflow.com/questions/33015654/how-to-bind-data-to-list-in-spring-form/33148339#33148339 – Lovababu

+0

謝謝-Lovababu。我認爲那就是我想要做的。我需要在模型中綁定我的模型。爲此,我用pastExp.companyName作爲路徑。但我得到了同樣的錯誤 –

相關問題