2017-06-13 2 views
0

Ich möchte ein Array an ein boolesches Feld binden können (Ich habe ein Kontrollkästchen und ein verstecktes Feld. Wenn ich keinen Wert für ein Feld erhalte, kann es Standardwert anzeigen). Frühling läßt nicht, dass:Wie man ein Array an einen booleschen Wert im Frühjahr bindet

binding error Field error in object 'target' on field 'documents': rejected value [true,false]; codes [typeMismatch.target.documents,typeMismatch.documents,typeMismatch.boolean,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.documents,documents]; arguments []; default message [documents]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'boolean' for property 'documents'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [true,false]] 

Ich habe versucht, mein eigenes Eigenschaftseditor hinzuzufügen, aber es scheint, dass dieser Fehler früher ausgelöst.

ServletRequestDataBinder binder = new ServletRequestDataBinder(formBean); 
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true, 10)); 


binder.registerCustomEditor(Boolean.class, new PropertyEditorSupport() { 
    @Override 
    public void setAsText(String text) { 
     logger.debug("boolean text : " + text); 
     // setValue(type); 
    } 
}); 

binder.registerCustomEditor(String[].class, new PropertyEditorSupport() { 
    @Override 
    public void setAsText(String text) { 
     logger.debug("array text : " + text); 
     // setValue(type); 
    } 
}); 

Antwort

0

Vorerst meine Lösung ist:

//autowire a ConversionService 
@Autowired 
ConversionService conversionService; 
[...] 
//set a ConversionService 
ServletRequestDataBinder binder = new ServletRequestDataBinder(formBean); 
binder.setConversionService(conversionService); 

einen Converter registrieren. Ich benutze Spring Boot, in meinem Fall registriert es als eine Bohne funktioniert.

@Component 
public class StringArrayToBolean implements Converter<String[], Boolean> { 

    protected final Logger logger = LoggerFactory.getLogger(getClass()); 

    @Override 
    public Boolean convert(String[] source) {; 
     if (source.length == 1) { 
      return source[0].equals("true"); 
     } else if (source.length > 0) { 
      for (String s : source) { 
       if (s.equals("true")) { 
        return true; 
       } 
      } 
     } 

     return false; 
    } 

} 
Verwandte Themen