我想让我的webapps能够接收&在表格中显示格式化的数字和格式化的日期 例如: 数量:1,000,000.00 日期:2013年12月2日*我将使用jquery datepicker
最好的策略是什么?
我应该为每个数字和日期字段创建一个瞬态字段吗? 例如:
class Person{
Date dateOfBirth;
BigDecimal salary;
......
String dateOfBirthFormatted;
String salaryFormatted;
static transients = ['salaryFormatted','dateOfBirthFormatted'];
}
或者我应该在视图中处理格式化的数字和日期字段(使用javascript并在提交表单之前处理)?
答案 0 :(得分:2)
如果计划仅获取在视图图层中格式化的数据,则应分别对salary
和dateOfBirth
使用formatNumber
和formatDate
标记。
就视图而言,它看起来像
<g:formatDate format="MM/dd/yyyy" date="${dateOfBirth}"/>
<g:formatNumber number="${salary}" type="number" maxFractionDigits="2" />
其中dateOfBirth
和salary
是此视图模型的一部分。
答案 1 :(得分:1)
在Javascript中,
//date
$("#dateOfBirth").datepicker({
changeMonth : true,
changeYear : true,
dateFormat : 'dd/mm/yyyy',
yearRange : '1901:2999',
});
//salary
if(/^(?!0\.00)\d{1,3}(,\d{3})*(\.\d\d)?$/.test($("#salaryFormatted").val())){
return true;
}
else{
$("#salaryFormatted").attr("oninvalid", "setCustomValidity('Please enter the salaryin proper format eg:(100.00,10,000.00)')");
$("#salaryFormatted").prop('required', true);
$("#salaryFormatted").val("");
return false;
}
在gsp中,
<input type="text" id="dateOfBirth" name="dateOfBirth"
value="${formatDate(format:'dd/MM/yyyy', date: personInstance?.dateOfBirth)}" />
<g:textField name="salaryFormatted" id="salaryFormatted" onchange="try{setCustomValidity('')}catch(e){}" value="${String.format("%,.2f", personInstance?.salaryFormatted)}" />
使用上面的代码。我想,这会有所帮助
答案 2 :(得分:0)
这个函数我写了帮助,其中sep
是日期格式的分隔符类型,如果没有输入则返回no。
function getDate(sep) {
if(typeof sep==='undefined')sep='';
var date = new Date();
return (date.getFullYear().toString()+sep+(date.getMonth()+1)+sep+date.getDate());
}