Question

Je me demande, je peux convertir la chaîne uri à un autre type d'objet?

    @RequestMapping(value="/key/{keyDomain}", method=RequestMethod.GET)
    public String propertyEditor(@PathVariable(value="keyDomain") KeyDomain key, Model model){
        model.addAttribute("key", key);
        return "propertyEditor";
    }

et ici ma configuration

<beans:bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <beans:property name="customEditors">
            <beans:map>
                <!-- <beans:entry key="com.template.baseline.domain.KeyDomain" value="com.template.baseline.propertyEditor.KeyPropertyEditor"/>  -->
                <beans:entry key="com.template.baseline.domain.KeyDomain">
                    <beans:ref bean="keyDomainPropertyEditor"  />
                </beans:entry>
            </beans:map>
        </beans:property>
    </beans:bean>

<!-- key domain property editor bean -->
<beans:bean id="keyDomainPropertyEditor"  class="com.template.baseline.propertyEditor.KeyPropertyEditor">
    <beans:property name="keyDomain">
        <beans:bean class="com.template.baseline.domain.KeyDomain" />
    </beans:property>   
</beans:bean>

et PropertyEditor Classe:

public class KeyPropertyEditor extends PropertyEditorSupport{

    private KeyDomain keyDomain;

    /**
     * example : 10435
     * - 10 will be keyId
     * - 435 will be baseOfficeId
     */
    @Override
    public void setAsText(String text) throws IllegalArgumentException{
        KeyDomain keyDomain = new KeyDomain();
        keyDomain.setKeyId(Integer.parseInt(text.substring(0,1)));
        keyDomain.setBaseOfficeId(Integer.parseInt(text.substring(2,4)));       
        setValue(keyDomain);
    }

    @Override
    public String getAsText() {
        KeyDomain value = (KeyDomain) getValue();
        return (value != null ? value.toString() : "");
    }

    public void setKeyDomain(KeyDomain keyDomain) {
        this.keyDomain = keyDomain;
    }   
}

Je pensais que je peux utiliser pour convertir éditeur de propriétés mon string URI devenir le type d'objet approprié. je l'ai déjà fait une mise en œuvre et configurer CustomEditorConfigurer, mais je reçois toujours ConversionNotSupportedException.

si j'ajouter initBinder à mon contrôleur, tout va très bien:

@InitBinder
public void setBinder(WebDataBinder dataBinder) {
    dataBinder.registerCustomEditor(KeyDomain.class, new KeyPropertyEditor());      
}

et je reçois Avertissement quelque chose comme ceci

  

WARN: org.springframework.beans.factory.config.CustomEditorConfigurer - passage d'une instance PropertyEditor en CustomEditorConfigurer est dépréciée: PropertyEditorRegistrars d'utilisation ou les noms de classe PropertyEditor à la place. Offending touche [com.template.baseline.domain.KeyDomain; offensant par exemple de l'éditeur: com.template.baseline.propertyEditor.KeyPropertyEditor@1a271f5

Merci pour la réponse.

ps: webBindingInitalizer injecté sur AnnotationMethodHandlerAdapter

<beans:bean id="AnnotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <beans:property name="webBindingInitializer">
        <beans:bean class="com.template.baseline.initialize.CustomWebBindingInitializer" />
    </beans:property>
</beans:bean>

et la mise en œuvre

public class CustomWebBindingInitializer implements WebBindingInitializer  {

public CustomWebBindingInitializer(){
    System.out.println("******** constructor *********");
}

public void initBinder(WebDataBinder binder, WebRequest request) {
    System.out.println("******** initBinder *********");
    binder.registerCustomEditor(KeyDomain.class, new KeyDomainPropertyEditor());
}

}

Était-ce utile?

La solution

CustomEditorConfigurer n'a rien à voir avec les données de demande web obligatoire.

Si vous voulez enregistrer votre PropertyEditor globablly, vous devez implémenter WebBindingInitializer et l'offre AnnotationMethodHandlerAdapter avec elle:

<bean 
    class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <proeprty name = "webBindingInitializer">
        <bean class = "MyWebBindingInitializer" />
    </property>
</bean>

Une autre option consiste à mettre en œuvre votre logique de conversion en tant que Formatter et le configurer via FormattingConversionServiceFactoryBean et <mvc:annotation-driven>, voir échantillon mvc-vitrine .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top