2014-04-24 5 views
1

У меня проблема с: выберите весной MVC.
Первая модель Azienda.java:Форма: выберите весной MVC

@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; 
} 
} 

Вторая модель Progetto.java, который унаследовал от класса Azienda.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 
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 с весны из тегов:

<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] 

rejected value [1,] является идентификационный номер в моем DB
Я пытаюсь разрешить его, но я не могу найти ничего, чтобы помочь ... Кто-то может мне помочь ??? Thx.

ответ

1

Вам необходимо реализовать подкласс 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.

Кроме того, не забывайте, что вам необходимо зарегистрировать PropertyEditor в функции @InitBinder в вашем контроллере.

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

Спасибо за ответы ... но теперь у меня есть эта проблема в eclispe сообщения 'умолчанию [Не удалось преобразовать значение свойства типа" java.lang.String [] для требуемого типа «spring.hibernate.model .Azienda 'за собственность' azienda '; nested exception is java.lang.NumberFormatException: для строки ввода: «1,»] ' – Melis

+0

Я решил, что я разделил эту строку« 1 », и теперь все в порядке .. Thx много hofan для вашей помощи .. – Melis

Смежные вопросы