2017-01-13 20 views
0

这是很简单的东西,但我无法找到一个很好的例子:复选框用SpringMVC:自定义绑定/ PropertyEditorSupport为自定义类型

我有,我想绑定到一个复选框用SpringMVC自定义数据类型,它看起来是这样的:YES/NO:

public enum YesNoDataType { 
    YES("Yes"), 
    NO("No"); 
} 

复选框用SpringMVC自动映射到布尔值,现在我需要映射Selected-> YES,空阱> NO。

我知道我必须实现这4个PropertyEditorSupport方法中的一个,但哪些方法,以及如何?

<form:checkbox path="testYesNo"></form:checkbox> 

型号

private YesNoDataType testYesNo; 

控制器

​​

回答

0

我试图界定和登记点转换器(YesNoDataType /布尔),但我用SpringMVC中的CheckboxTag.java看到,他们都是没用。没有转换器或绑定的调整会工作,因为标签明确检查布尔只有字符串

protected void writeTagDetails(TagWriter tagWriter) throws JspException { 
    tagWriter.writeAttribute("type", getInputType()); 

    Object boundValue = getBoundValue(); 
    Class<?> valueType = getBindStatus().getValueType(); 

    if (Boolean.class.equals(valueType) || boolean.class.equals(valueType)) { 
     // the concrete type may not be a Boolean - can be String 
     if (boundValue instanceof String) { 
      boundValue = Boolean.valueOf((String) boundValue); 
     } 
     Boolean booleanValue = (boundValue != null ? (Boolean) boundValue : Boolean.FALSE); 
     renderFromBoolean(booleanValue, tagWriter); 
    } 

    else { 
     Object value = getValue(); 
     if (value == null) { 
      throw new IllegalArgumentException("Attribute 'value' is required when binding to non-boolean values"); 
     } 
     Object resolvedValue = (value instanceof String ? evaluate("value", value) : value); 
     renderFromValue(resolvedValue, tagWriter); 
    } 
} 

弦乐结合是无关紧要的给我。在getValue()字符串绑定(条款#2)中,如果其value=""属性与模型中的字符串匹配,则会选中一个复选框。我需要的是一个True/False布尔绑定,但我的转换器需要插入到第1条中以从自定义类型获取布尔值。只是非常沮丧的是,当你试图超越常见的狭义参数时,Spring是如此限制性的。问题仍然突出。