【发布时间】:2016-10-13 16:45:24
【问题描述】:
我是一个较新的开发者,我正在使用 jsp、freemarker 和 java-ee 开发一个项目。我的问题是我无法使用 freemarker 将字符串转换为双精度。我正在使用带有双输入的表单,如果输入是整数,则验证完成而没有错误,如果是带逗号的数字,我会收到一个异常:
FreeMarker 模板错误: 无法将此字符串转换为数字:“43,5”
这是我的模型:
@表 公共类 BalanceConfig 扩展 BaseObject 实现 Serializable {
@Id(sequence = "SEQ_BALANCE_CONFIG")
@SearchCriteria
protected Long id;
@ManyToOne
@SearchCriteria
private Balance balance;
@OneToMany(clazz = BalanceConfigProfile.class, cascade = CascadeType.REMOVE)
@SearchCriteria
private List<BalanceConfigProfile> balanceConfigProfiles;
@OneToMany(clazz = BalanceUsage.class, cascade = CascadeType.REMOVE)
@SearchCriteria
private List<BalanceUsage> balanceUsages;
@Column
@SearchCriteria
private Long balanceId;
@Column
@SearchCriteria(type = SearchCriteriaType.LIKE)
private String name;
@Column
@SearchCriteria
private String unit;
@Column
@SearchCriteria
private String family;
@Column
@SearchCriteria
private Double conversionRate;
@Column
@SearchCriteria
private Integer priority;
@Column
@SearchCriteria
private Date startDate;
@Column
@SearchCriteria
private Date endDate;
@Column
@SearchCriteria
private Boolean zeroVisibility;
@Column
@SearchCriteria
private Boolean portailVisibility;
@Column
@SearchCriteria
private Boolean crmVisibility;
@Column
@SearchCriteria
private Boolean selfcareVisibility;
@Column
@SearchCriteria
private Boolean endDateVisibility;
@Column
@SearchCriteria
private Boolean defaultConfig;
getters and setters;
}
模板是:
{
"id" : "${balanceConfig.id}",
"balanceId" : "${balanceConfig.balanceId}",
"balanceCode" : "${balanceConfig.balance.code}",
"name" : "<#if balanceConfig.name??>${balanceConfig.name?json_string}</#if>",
"unit" : "<#if balanceConfig.unit??>${balanceConfig.unit?json_string}</#if>",
"family" : "<#if balanceConfig.family??>${balanceConfig.family?json_string}</#if>",
"conversionRate" : "<#if balanceConfig.conversionRate??>${balanceConfig.conversionRate?number}</#if>",
"priority" : "<#if balanceConfig.priority??>${balanceConfig.priority?number}</#if>",
"startDate" : "<#if balanceConfig.startDate??>${balanceConfig.startDate?date}</#if>",
"endDate" : "<#if balanceConfig.endDate??>${balanceConfig.endDate?date}</#if>",
"zeroVisibility" : "<#if balanceConfig.zeroVisibility??>${balanceConfig.zeroVisibility?string}</#if>",
"portailVisibility" : "<#if balanceConfig.portailVisibility??>${balanceConfig.portailVisibility?string}</#if>",
"crmVisibility" : "<#if balanceConfig.crmVisibility??>${balanceConfig.crmVisibility?string}</#if>",
"selfcareVisibility" : "<#if balanceConfig.selfcareVisibility??>${balanceConfig.selfcareVisibility?string}</#if>",
"endDateVisibility" : "<#if balanceConfig.endDateVisibility??>${balanceConfig.endDateVisibility?string}</#if>",
"defaultConfig" : "<#if balanceConfig.defaultConfig??>${balanceConfig.defaultConfig?string}</#if>"
}
这里是个例外:
FreeMarker template error:
Can't convert this string to number: "43,5"
The blamed expression:
==> balanceConfig.conversionRate?number [in template "balanceconfig.ftl" at line 8, column 70]
The failing instruction (FTL stack trace):
----------
==> ${balanceConfig.conversionRate?number} [in template "balanceconfig.ftl" at line 8, column 68]
----------
Java stack trace (for programmers):
----------
freemarker.core.NonNumericalException: [... Exception message was already printed; see it above ...]
at freemarker.core.NonNumericalException.newMalformedNumberException(NonNumericalException.java:98)
at freemarker.core.StringBuiltins$numberBI.calculateResult(StringBuiltins.java:223)
at freemarker.core.StringBuiltins$StringBuiltIn._eval(StringBuiltins.java:87)
at freemarker.core.Expression.eval(Expression.java:111)
at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.Environment.process(Environment.java:243)
at freemarker.template.Template.process(Template.java:277)
【问题讨论】:
标签: java jsp freemarker