Système d'exploitation: Windows Vista, Framework: Spring (dernier), JQuery (dernier), Hibernate (plus récent).Nouvel objet Exception de liaison: Impossible de convertir la chaîne en longue (type primitif)
J'ai une classe de domaine avec la clé primaire comme identifiant long.
public class domain{
private long id;
....
}
Ma définition du contrôleur:
@RequestMapping("/domainJqgridData/save")
public @ResponseBody String saveJqgridData(DomainClass domainclass) throws Exception {
return "Saved successfully!";
}
Lorsque le formulaire JSP est soumis à ajouter un nouvel enregistrement DomainClass, le contrôleur de printemps essaie de lier automatiquement les paramètres de la requête à la classe de domaine. Il émet une exception BindException comme suit:
Le traitement de la demande a échoué; l'exception imbriquée est org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 erreurs Erreur de zone dans l'objet 'domaine' sur le champ 'id': valeur rejetée [_empty]; codes [typeMismatch.domainclass.id, typeMismatch.id, typeMismatch.long, typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [domainclass.id, id]; arguments []; message par défaut [id]]; default message [Echec de la conversion de la valeur de la propriété de type 'java.lang.String' en type obligatoire 'long' pour la propriété 'id'; l'exception imbriquée est org.springframework.core.convert.ConversionFailedException: Impossible de convertir la valeur " _empty " du type 'java.lang.String' en type 'long'; exception imbriquée est java.lang.NumberFormatException: Pour chaîne d'entrée: " _empty "] org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:656) org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet .java: 560) javax.servlet.http.HttpServlet.service (HttpServlet.java:637) javax.servlet.http.HttpServlet.service (HttpServlet.java:717) org.springframework.web.filter.CharacterEncodingFilter. doFilterInternal (CharacterEncodingFilter.java:88)
Lorsque j'ajoute un nouvel enregistrement DomainClass, le champ id est passé en tant que null par le formulaire JSP. Spring convertit l'identifiant null en valeur de chaîne vide à des fins de liaison et renvoie l'erreur. J'ai navigué sur le net et j'ai découvert que je pouvais enregistrer des éditeurs personnalisés à cette fin. J'ai changé l'ID long de la définition du type de primitive DomainClass, à Long id et essayé de lier un éditeur personnalisé comme suit.
Controller class:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Long.class, new CustomPrimitiveFormat(Long.class, true));
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
Ma classe personnalisée de l'éditeur primitive est la suivante:
public class CustomPrimitiveFormat extends CustomNumberEditor{
public CustomPrimitiveFormat(Class numberClass, boolean allowEmpty)
throws IllegalArgumentException {
super(numberClass, allowEmpty);
// TODO Auto-generated constructor stub
}
public void setValue(Object value){
System.out.println("Entered CustomPrimitiveFormat setValue");
if (value == null) {
super.setValue(null);
return;
}
if (value.getClass().equals(String.class)){
if (StringUtils.isEmpty((String)value)){
super.setValue(null);
}
}
}
public void setAsText(Object value){
System.out.println("Entered CustomPrimitiveFormat setAsText");
if (value == null) {
super.setValue(null);
return;
}
if (value.getClass().equals(String.class)){
if (StringUtils.isEmpty((String)value)){
super.setValue(null);
}
}
}
}
Je reçois toujours le BindingException. Impossible de trouver un lien qui me guiderait à travers comment surmonter Spring BindException lors de l'ajout d'un nouvel enregistrement de classe de domaine. Je voudrais que ma clé primaire reste de type primitif, au lieu d'utiliser le type d'objet Number.
Merci d'avance pour votre aide.
Merci! beaucoup pour le lien. Je comprends ma folie. J'ai négligé '_' et supposé que cela passait à vide.J'ai renommé le champ id dans prmNames et le printemps ne donne plus l'erreur. Merci! encore. – Jayaprakash