2016-02-15 78 views
0

如果我在平面文件的單行中有2個日期格式,我該如何使用org.springframework.beans.propertyeditors.CustomDateEditor。在平面文件「MMddyyyy」和「MMddyyyyHHmm」中具有兩行日期格式

<bean id="dateEditor1" class="org.springframework.beans.propertyeditors.CustomDateEditor"> 
<constructor-arg> 
<bean class="java.text.SimpleDateFormat"> 
<constructor-arg value="MMddyyyy" /> 
    </bean> 
    </constructor-arg> 
<constructor-arg value="true" /> 
</bean> 


<bean id="dateEditor2" class="org.springframework.beans.propertyeditors.CustomDateEditor"> 

<constructor-arg> 
    <bean class="java.text.SimpleDateFormat"> 
     <constructor-arg value="MMddyyyyHHmm" /> 
    </bean> 
</constructor-arg> 
<constructor-arg value="true" /> 

</bean> 

<property name="customEditors"> 
     <map> 
     <entry key="java.util.Date" value-ref="dateEditor1"/> 
     <entry key="java.util.Date" value-ref="dateEditor1"/> 
     </map> 
</property> 

我正在嘗試上面的代碼。但它不起作用。我正在使用PatternMatchingCompositeLineMapper。

+0

我沒有得到你,如果你有2種不同的格式,參考bean中的差異格式..那是什麼地圖? – surya

回答

0

你不能那樣做。看看你正在使用java.util.Date作爲鍵的映射,然後你期待它保存2個值。 map不能以這種方式工作,如果鍵已經存在,它將始終覆蓋該值。因此在你的情況下,你必須編寫一個自定義的bean來在平面文件中設置這些字段。

根據Spring doc,每個屬性路徑只支持一個註冊自定義編輯器。

但是,您可以編寫一個自定義dateformat類,它將保存不同日期格式的列表,並使用此類自動裝入自定義編輯器。 例如下面給出的一個例子,或者您創建自定義編輯器幷包裝CustomDateEditor的列表,有多種用法,您可以參考下面的一個示例。

<bean id="customer4" class="org.testSpring.util.DateBeanTest4"> 
    <property name="birthDate"> 
     <bean factory-bean="customDateFormat" factory-method="parse"> 
      <constructor-arg value="31-01-2010" /> 
      <!-- mm/dd/yyyy, dd-MM-yyyy, yyyyMMdd --> 
     </bean> 
    </property> 
</bean> 
    <bean id="customDateFormat" class="org.testSpring.util.CustomDateFormats"> 
</bean> 

而且你的格式化程序類

public class CustomDateFormats extends DateFormat { 

private static final List<? extends DateFormat> DATE_FORMATS = Arrays.asList(
    // or inject thorough construction with a list of formats 
    new SimpleDateFormat("dd-MM-yyyy"), 
    new SimpleDateFormat("mm/dd/yyyy"), 
    new SimpleDateFormat("yyyyMMdd")); 


@Override 
public StringBuffer format(final Date date, final StringBuffer toAppendTo, final FieldPosition fieldPosition) 
{ 
    throw new UnsupportedOperationException("This custom date formatter can only be used to *parse* Dates."); 
} 

@Override 
public Date parse(final String source, final ParsePosition pos) { 
    Date res = null; 
    for (final DateFormat dateFormat : DATE_FORMATS) { 
     if ((res = dateFormat.parse(source, pos)) != null) { 
      return res; 
     } 
    } 

    return null; 
} 

}

+0

我需要它用於我的彈簧批處理器中的物品閱讀器。 可以i執行以下: 'code' \t <豆ID = 「LBOFieldSetMapper」 類= 「org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper」> \t \t <屬性名= 「prototypeBeanName」 值= 「BatchOpenTransactionData」/> \t \t \t \t <! - <屬性名= 「customEditors」> \t \t \t \t \t <條目鍵= 「java.util.Date」 值-REF = 「customDateFormat」/> \t \t \t < \t \t \t \t - > \t <豆id =「customDateFormat」class =「org.testSpring.util。CustomDateFormats「> 'code' –

1

用下面的自定義日期格式:

public class CustomDateFormats extends DateFormat { 

private static final long serialVersionUID = 1L; 
private static final String[] formats = new String[] { "MMddyyyy", "MMddyyyyHHmm", "MMdd" }; 
Date result = null; 

@Override 
public StringBuffer format(final Date date, final StringBuffer toAppendTo, final FieldPosition fieldPosition) { 
    throw new UnsupportedOperationException("This custom date formatter can only be used to *parse* Dates."); 
} 

@Override 
public Date parse(final String source, final ParsePosition pos) { 
    Date res = null; 

    for (String format : formats) { 
     if (source != null && format.length() == source.length()) { 
      SimpleDateFormat sdFormat = new SimpleDateFormat(format); 
      res = sdFormat.parse(source, pos); 
      break; 
     } 
    } 
    return res; 
} 

} 
<bean id="dateEditor1"  class="org.springframework.beans.propertyeditors.CustomDateEditor"> 
    <constructor-arg> 
<bean class="com.disney.wdpro.service.transaction.processing.batch.domain.logicalBatchOpen.CustomDateFormats" /> 
    </constructor-arg> 
    <constructor-arg value="true" /> 
</bean> 

相關問題