2016-12-03 44 views
0

「項目」Spring的 「<形式:請選擇。」 不工作,HTTP狀態400

@Entity 
@Table(name = "projects") 
public class Project extends NamedEntity { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
protected Long id; 

@Column(name = "name") 
private String name; 

@Column(name = "start_date") 
@Temporal(TemporalType.DATE) 
@DateTimeFormat(pattern = "dd/MM/yyyy") 
private Date startDate; 

@Column(name = "end_date") 
@Temporal(TemporalType.DATE) 
@DateTimeFormat(pattern = "dd/MM/yyyy") 
private Date endDate; 

@Column(name = "description") 
private String description; 

@Column(name = "notes") 
private String notes; 

@ManyToOne 
@JoinColumn(name = "project_status_id") 
private ProjectStatus projectStatus; 

@ManyToOne 
@JoinColumn(name = "project_objective_id") 
private ProjectObjective projectObjective; 

// Getters & Setters... 
} 

「ProjectStatus」

@Entity 
@Table(name = "project_statuses") 
public class ProjectStatus { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
protected Long id; 

@Column(name = "name") 
private String name; 

// Getters & Setters... 
} 

「ProjectObjective」

@Entity 
@Table(name = "project_objectives") 
public class ProjectObjective { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
protected Long id; 

@Column(name = "name") 
private String name; 

// Getters & Setters... 
} 

「Controller」

@Controller 
public class ProjectController { 

@Autowired 
private FirmManagerService firmManagerService; 

@ModelAttribute("statuses") 
public Collection<ProjectStatus> populateProjectStatuses() { 
    return this.firmManagerService.findProjectStatuses(); 
} 

@ModelAttribute("objectives") 
public Collection<ProjectObjective> populateProjectObjectives() { 
    return this.firmManagerService.findProjectObjectives(); 
} 

@RequestMapping(value = "/projects/{projectId}/edit", method = RequestMethod.GET) 
public String initUpdateProjectForm(@PathVariable("projectId") long projectId, Model model) { 
    Project project = this.firmManagerService.findProjectById(projectId); 
    model.addAttribute("project", project); 
    return "projects/createOrUpdateProject"; 
} 

@RequestMapping(value = "/projects/{projectId}/edit", method = RequestMethod.POST) 
public String processUpdateProjectForm(@ModelAttribute("project") Project project, ModelMap model) { 
    model.put("project", project); 
     return "projects/testEditProjectPage"; 
} 
//... 
} 

JSP 「createOrUpdateProject」

<form:form modelAttribute="project" method="post" action="/projects/${project.id}/edit" 
       class="form-horizontal"> 
     <input type="hidden" name="id" value="${project.id}"/> 
      <label>Name</label> 
       <form:input class="form-control" path="name"/> 
      <label>Start Date</label> 
       <form:input class="form-control" path="startDate"/> 
      <label>End Date</label> 
       <form:input class="form-control" path="endDate"/> 
      <label>Description</label> 
       <form:input class="form-control" path="description"/> 
      <label>Notes</label> 
       <form:input class="form-control" path="notes"/> 


      <label>Project's Status</label> 
      <form:select class="form-control" path="projectStatus" items="${statuses}" size="4"/> 
      <label>Project's Objective</label> 
      <form:select class="form-control" path="projectObjective" items="${objectives}" size="7"/> 

     <div class="form-group"> 
      <button class="btn btn-default" type="submit">Update Project</button> 
     </div> 
    </form:form> 

JSP 「testEditProjectPage」

<table class="table table-striped"> 
<tr> 
    <th>ID</th> 
    <td><b><c:out value="${project.id}"/></b></td> 
</tr> 
<tr> 
    <th>Name</th> 
    <td><b><c:out value="${project.name}"/></b></td> 
</tr> 
<tr> 
    <th>Status ID</th> 
    <td><c:out value="${project.projectStatus.id}"/></td> 
</tr> 
<tr> 
    <th>Status</th> 
    <td><c:out value="${project.projectStatus.name}"/></td> 
</tr> 
<tr> 
    <th>Objective ID</th> 
    <td><c:out value="${project.projectObjective.id}"/></td> 
</tr> 
<tr> 
    <th>Objective</th> 
    <td><c:out value="${project.projectObjective.name}"/></td> 
</tr> 
<tr> 
    <th>Description</th> 
    <td><c:out value="${project.description}"/></td> 
</tr> 
<tr> 
    <th>Notes</th> 
    <td><c:out value="${project.notes}"/></td> 
</tr> 
<tr> 
    <th>Start date</th> 
    <td><fmt:formatDate value="${project.startDate}" pattern="yyyy-MM-dd"/></td> 
</tr> 
<tr> 
    <th>End date</th> 
    <td><fmt:formatDate value="${project.endDate}" pattern="yyyy-MM-dd"/></td> 
</tr> 

項目有projectStatus和projectObjective。問題是,如果我通過使用spring的「form:select」將字段「projectStatus」和「projectObjective」發佈到「project」,我得到了一個HTTP 400錯誤(客戶端發送的請求在語法上不正確)。

SCREEN

,如果我不包括JSP形式這兩種選擇,它正確地顯示最近發佈的項目,但當然以NULL狀態和目標領域。

SCREEN

請!澄清我,如何正確使用這個「表單:選擇」發佈數據。由於這個問題,我不能「編輯」項目(通過使用entityManager.merge(項目)),因爲projectStatus和projectObjective的「id」和「name」字段爲NULL :(

我寫了這個項目,通過使用Spring的。的PetClinic代碼中的PetClinic它工作得很好我有相同的字段「projectStatus」和「projectObjective」一樣,像在的PetClinic的「寵物」實體 「類型」:

<form:form modelAttribute="pet" 
     <input type="hidden" name="id" value="${pet.id}"/> 
      <form:input class="form-control" path="name"/> 
      <form:input class="form-control" path="birthDate"/> 
      <form:select class="form-control" path="type" items="${types}" size="5"/> 
      <button class="btn btn-default" type="submit">Update Pet</button> 
    </form:form> 
+0

而不是JSTL選擇使用普通的HTML選擇 –

回答

0

使用形式:選擇標籤:

<form:select class="form-control" path=" " id=" "> 
    <form:option value ="" selected="Selected"> - Select -</form:option> 
     <c:if test="${!empty listname}"> 
      <c:forEach items=" " var=" "> 
       <c:choose> 
       .... 

       </c:choose> 
      </c:forEach> 
     </c:if> 
</form:select> 
相關問題