gpt4 book ai didi

java - 表格:select in spring MVC

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:22 26 4
gpt4 key购买 nike

我在 Spring MVC 中遇到 from:select 问题。
第一个模型是Azienda.java:

@Entity
@Table(name = "azienda")
public class Azienda implements Serializable {

private static final long serialVersionUID = 1787438745757438466L;

private Integer id_azienda; // This is what i want to put in my "from:select" and retrieve
private String ragione_sociale;
private String indirizzo;

public Azienda() {

}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "VA06148AE14539F54E6601582", sequenceName = "azienda_id_azienda_seq")
@Column(name = "id_azienda", nullable = false)
public Integer getId_azienda() {
return this.id_azienda;
}

public void setId_azienda(Integer value) {
this.id_azienda = value;
}

@Column(name = "ragione_sociale", nullable = false, length = 10)
public String getRagione_sociale() {
return this.ragione_sociale;
}

public void setRagione_sociale(String value) {
this.ragione_sociale = value;
}

@Column(name = "indirizzo", nullable = false, length = 30)
public String getIndirizzo() {
return this.indirizzo;
}

public void setIndirizzo(String value) {
this.indirizzo = value;
}
}

继承自类Azienda.java的第二个模型Progetto.java是:

@Entity
@Table(name = "progetto")
public class Progetto implements Serializable {

private static final long serialVersionUID = 908957127555871179L;

private int id_progetto;
private String nome;
private Integer costo;
private Date data_inizio;
private Date data_fine;
private Azienda azienda;
private String descrizione;

public Progetto() {

}

@ManyToOne(optional = false)
@JoinColumn(name = "azienda", referencedColumnName = "id_azienda")
public Azienda getAzienda() {
return this.azienda;
}

public void setAzienda(Azienda value) {
this.azienda = value;
}

@Column(name = "workpackage")
@OneToMany(mappedBy = "progetto")
public Collection<Workpackage> getWorkpackage() {
return this.workpackage;
}

public void setWorkpackage(Collection<Workpackage> value) {
this.workpackage = value;
}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "VA06148AE14539F54E7001591")
@SequenceGenerator(name = "VA06148AE14539F54E7001591", sequenceName = "progetto_id_progetto_seq")
@Column(name = "id_progetto", nullable = false)
public int getId_progetto() {
return this.id_progetto;
}

public void setId_progetto(int value) {
this.id_progetto = value;
}

@Column(name = "nome", nullable = false, length = 30)
public String getNome() {
return this.nome;
}

public void setNome(String value) {
this.nome = value;
}

@Column(name = "descrizione", nullable = false, length = 180)
public String getDescrizione() {
return this.descrizione;
}

public void setDescrizione(String value) {
this.descrizione = value;
}

@Column(name = "costo", nullable = false)
public Integer getCosto() {
return this.costo;
}

public void setCosto(Integer value) {
this.costo = value;
}

@Column(name = "data_inizio", nullable = false)
public Date getData_inizio() {
return this.data_inizio;
}

public void setData_inizio(Date value) {
this.data_inizio = value;
}

@Column(name = "data_fine", nullable = false)
public Date getData_fine() {
return this.data_fine;
}

public void setData_fine(Date value) {
this.data_fine = value;
}
}

addProject 的 Controller 是:

@Controller
public class ProjectController {

protected final Logger log = Logger.getLogger(ProjectController.class);

@Autowired
private AziendaService service;

@RequestMapping(value ="/addProject", method = RequestMethod.GET)
public String createProject(@ModelAttribute("progetto") Progetto progetto, Map<String, Object> model) {
log.info("initiale createProject method.....");

Collection<Azienda> collection = service.getAllCompany(); // Here i get all company in my DB
model.put("modelList", collection); // and i put them in this model to retrieve them in jsp

return "addProject";
}

@RequestMapping(value ="/addProject", method = RequestMethod.POST)
public void addProject(@ModelAttribute("progetto") Progetto progetto) {
log.info("initiale addProject method.....");

log.info("project name :"+progetto.getNome());
log.info("project costo :"+progetto.getCosto());
log.info("data_inizio :"+progetto.getData_inizio());
log.info("data_fine :"+progetto.getData_fine());
log.info("azienda :"+progetto.getAzienda());

}

jsp中带有Spring from标签的from是:

<form:form method="post" action="addProject.htm" commandName="progetto">
<table>
<tr>
<th>Project name:</th>
<td><form:input id="projectname" path="nome" type="text" class="inp-form" /></td>
<td></td>
</tr>
<tr>
<th>Project cost:</th>
<td><form:input id="projectcost" path="costo" type="text" class="inp-form" placeholder="Ex: 1.00"/></td>
<td></td>
</tr>
<tr>
<th>Start Date:</th>
<td>
<form:input id="startdate" path="data_inizio" type="text" class="inp-form"/>
</td>

</tr>
<tr>
<th>End Date:</th>
<td>
<form:input id="enddate" path="data_fine" type="text" class="inp-form" />
</td>
</tr>
<tr>
<th>Select Company:</th>
<td>
<form:select id="company" path="azienda" class="styledselect_form_1">
<form:option value="" label="--Please Select"/>
<form:options items="${modelList}" itemValue="id_azienda" itemLabel="ragione_sociale"/>
</form:select>
</td>
</tr>
<tr>
<th>Description:</th>
<td><form:textarea id="description" path="descrizione" cols="50" rows="8"
class="form-textarea" style="resize: none;"
maxlength="600"
onKeyPress="return ( this.value.length < 600 );"
placeholder="Maximun 600 characters.."></form:textarea></td>
<td></td>
</tr>
<tr>
<th>&nbsp;</th>
<td>
<input type="submit" value="" class="form-submit" />
<input type="reset" value="" class="form-reset" />
</td>
<td></td>
</tr>
</table>
<!-- end id-form -->
</form:form>

当我填写表单时,我在 Eclipse 中遇到此错误:

16:00:10,187 DEBUG [ExceptionHandlerExceptionResolver:] - Resolving exception from handler [public void spring.hibernate.controller.ProjectController.addProject(spring.hibernate.model.Progetto)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'progetto' on field 'azienda': rejected value [1,]; codes [typeMismatch.progetto.azienda,typeMismatch.azienda,typeMismatch.spring.hibernate.model.Azienda,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [progetto.azienda,azienda]; arguments []; default message [azienda]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'spring.hibernate.model.Azienda' for property 'azienda'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String[]] to required type [spring.hibernate.model.Azienda] for property 'azienda': no matching editors or conversion strategy found]
16:00:10,187 DEBUG [ResponseStatusExceptionResolver:] - Resolving exception from handler [public void spring.hibernate.controller.ProjectController.addProject(spring.hibernate.model.Progetto)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'progetto' on field 'azienda': rejected value [1,]; codes [typeMismatch.progetto.azienda,typeMismatch.azienda,typeMismatch.spring.hibernate.model.Azienda,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [progetto.azienda,azienda]; arguments []; default message [azienda]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'spring.hibernate.model.Azienda' for property 'azienda'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String[]] to required type [spring.hibernate.model.Azienda] for property 'azienda': no matching editors or conversion strategy found]
16:00:10,187 DEBUG [DefaultHandlerExceptionResolver:] - Resolving exception from handler [public void spring.hibernate.controller.ProjectController.addProject(spring.hibernate.model.Progetto)]: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'progetto' on field 'azienda': rejected value [1,]; codes [typeMismatch.progetto.azienda,typeMismatch.azienda,typeMismatch.spring.hibernate.model.Azienda,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [progetto.azienda,azienda]; arguments []; default message [azienda]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'spring.hibernate.model.Azienda' for property 'azienda'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String[]] to required type [spring.hibernate.model.Azienda] for property 'azienda': no matching editors or conversion strategy found]

拒绝值 [1,] 1 是我的数据库中的数字 ID
我尝试解决它,但我找不到任何帮助...有人可以帮助我吗???谢谢。

最佳答案

您需要实现 PropertyEditorSupport 子类,以便从数据层检索 Azienda 类实例。

class AziendaEditor extends PropertyEditorSupport {
private AziendaService service;

public AziendaEditor(AziendaService service) {
this.service = service;
}

@Override
public void setAsText(String identifier) {
setValue(service.getAziendaFromId(identifier));
}
}

参见Spring MVC type conversion : PropertyEditor or Converter?有关 PropertyEditor 的说明。

另外,不要忘记您需要在 Controller 的 @InitBinder 函数中注册 PropertyEditor。

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Azienda.class, new AziendaEditor(service));
}

关于java - 表格:select in spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com