在我的Grails项目中,我有一个带有双字段的Domain Class,如下所示:
double totalAmount;
该字段的值通过在选择多个选择中的值之后完成的总和来计算。 sum值的函数在控制器中,如下所示:
def sumReceiptItems(){
params.list("receiptItemsSelected").each {i-> println("element "+i)}
def appList = params.list("receiptItemsSelected")
List<ReceiptItem> allSelectedIds = ReceiptItem.findAllByIdInList(params.receiptItemsSelected.split(',')*.toLong())
def totalAmount = allSelectedIds.amount.sum()
println("totalAmount is = "+totalAmount)
render totalAmount as Double
}
该功能运作良好。在函数调用之后,为了更新GSP页面中的字段,我使用如下的javascript方法:
function updateTotalAmount(name, data, presentNullAsThis){
if(data !=null)
document.getElementById(name).value= data;
else
document.getElementById(name).value=presentNullAsThis;
}
javascript工作,我看到在运行时更新字段,但double值用点显示,而不是用逗号分隔十进制值。事实上,在单击“保存”按钮以保存域类的实例后,将保存该值而不分隔小数,例如:
如果fiels中的值为10.50,则存储为1050
在这次讨论中how can save a double type correctly in grails?我读过类似的问题,但解决方案对我的问题不利。
任何人都可以帮助我?
答案 0 :(得分:1)
带小数分隔符的值取决于用户的当前Locale
。通常,您在视图中使用g.formatNumber
来正确显示值。
您可以查看this topic如何发现区域设置的小数点分隔符。
要获取用户的区域设置:
Locale locale = RequestContextUtils.getLocale(request)
答案 1 :(得分:0)
我用这种方式解决了这个问题:
我已按如下方式更新了我的Javascript:
function updateTotalAmount(name, data, presentNullAsThis)
{
var data2 = data.toString().replace(/\./g, ',');
if(data2 != null) document.getElementById(name).value= data2;
else document.getElementById(name).value= presentNullAsThis;
}
我在gsp相关字段中删除了“type =”number“”