Tôi đã tìm kiếm và thử trong 2 ngày. Cuối cùng tôi đã chọn để định nghĩa một PropertyEditorRegistar tùy chỉnh. Bằng cách này, tôi có thể sửa Locale chỉ cho định dạng trường Đôi. Tuy nhiên, tôi không nghĩ rằng đó là giải pháp tốt nhất vì nó sẽ được áp dụng cho tất cả các trường Đôi của tôi. Nhưng trong thời gian đó nó thực hiện công việc khá tốt. Vì vậy, nếu ai đó có giải pháp tốt hơn, tôi sẽ rất vui khi thử nghiệm và cập nhật mã của tôi.
Vì vậy, đây là cách tôi thiết lập:
1 - Tạo một lớp groovy mới mà thực hiện PropertyEditorRegistrar (nếu bạn đã có một, chỉ cần thêm một phần của mã chứa bằng phương pháp này trong một hiện)
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
public class CustomDoubleRegistrar implements PropertyEditorRegistrar {
@Override
public void registerCustomEditors(PropertyEditorRegistry registry) {
//define new Double format with hardcoded Locale.ENGLISH
registry.registerCustomEditor(Double.class,
new CustomNumberEditor(Double.class,
DecimalFormat.getInstance(Locale.ENGLISH),true))
}
}
2- Xác định cơ quan đăng ký tùy chỉnh vào conf/mùa xuân/resources.goovy (nếu nó chưa có các khóa học)
beans = {
customPropertyEditorRegistrar(CustomDoubleRegistrar)
}
3- đó là nó, Grai ls dữ liệu tự động ràng buộc sẽ làm việc tốt
Test t = new Test(params);
//params contains many Double fields with dot '.' as decimal delimiter
Đừng ngần ngại gửi giải pháp tốt hơn ... Cảm ơn
EDIT 1
Kể từ Grails 2.3 giải pháp này không còn làm việc. Nếu bạn vẫn muốn sử dụng giải pháp này, bạn phải thêm cấu hình này cho Config.groovy tập tin
grails.databinding.useSpringBinder = true
Hoặc thực hiện một trong những mới DataBinding. Tôi đã thử một vài trong số họ nhưng không có gì có vẻ để giải quyết vấn đề phân cách thập phân. Cảm ơn bạn đã đăng câu trả lời nếu bạn biết cách ...
EDIT 2
Kể từ Grails 2.4+ bạn có thể xác định ValueConverter của riêng bạn để bỏ qua xác nhận Locale cơ bản. Lưu ý rằng bạn phải xóa các thay đổi được thực hiện trong bài đăng đầu tiên và trong EDIT 1. Dưới đây là làm thế nào để thực hiện ValueConverter tùy chỉnh:
conf/mùa xuân/resources.groovy
// Place your Spring DSL code here
beans = {
"defaultGrailsjava.lang.DoubleConverter"(DoubleValueConverter)
}
class DoubleValueConverter implements ValueConverter {
public LongValueConverter() {
}
boolean canConvert(value) {
value instanceof Double
}
def convert(value) {
//In my case returning the same value did the trick but you can define
//custom code that takes care about comma and point delimiter...
return value
}
Class<?> getTargetType() {
return Double.class
}
}
hoạt động! :), Cảm ơn nhiều! – conca
tôi đang làm việc với grails 3.3.1 và giải pháp này không hoạt động cho các đối tượng lệnh của tôi. cũng @BingUsing không hoạt động. Tôi không biết tại sao họ thay đổi hành vi cũ. cái mới ghê tởm: / – pebbles