2017-01-13 28 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是如此限制性的。問題仍然突出。