If in a template <td>${attribute.value}</td> is used, and value is boolean, the following exception is thrown:
freemarker.core.NonStringException: Error on line 19, column 3 in description.ftl
Expecting a string, date or number here, Expression a.value is instead a freemarker.ext.beans.BooleanModel
- quote: "..Unlike numbers, booleans has no commonly accepted format, not even a
common format within the same page. Like when you show on a HTML page.."
"...The common way of formatting a boolean is like ${washable?string("yes", "no")},
${caching?string("Enabled", "Disabled")}, ${heating?string("on", "off")}, etc..."
- By the other hand, the Features used in the unit test for FeatureTemplate contained no boolean properties. Adding a boolean property to the test data still didn't make the error to show up, as the template used uses <td>${attribute.value.toString()}</td>. Changing the template to use <td>${attribute.value}</td> exposes the error.
freemarker.core.NonStringException: Error on line 19, column 3 in description.ftl
Expecting a string, date or number here, Expression a.value is instead a freemarker.ext.beans.BooleanModel
- quote: "..Unlike numbers, booleans has no commonly accepted format, not even a
common format within the same page. Like when you show on a HTML page.."
"...The common way of formatting a boolean is like ${washable?string("yes", "no")},
${caching?string("Enabled", "Disabled")}, ${heating?string("on", "off")}, etc..."
- By the other hand, the Features used in the unit test for FeatureTemplate contained no boolean properties. Adding a boolean property to the test data still didn't make the error to show up, as the template used uses <td>${attribute.value.toString()}</td>. Changing the template to use <td>${attribute.value}</td> exposes the error.
探讨了在使用Freemarker模板引擎时遇到的问题:当模板尝试直接输出布尔类型的属性值时,会抛出NonStringException异常。文章分析了异常产生的原因,并提供了两种解决方案:一种是在模板中使用toString()方法转换布尔值;另一种是利用条件表达式将布尔值转换为字符串。
964

被折叠的 条评论
为什么被折叠?



