Freemarker“字符串到哈希转换”?

Posted

技术标签:

【中文标题】Freemarker“字符串到哈希转换”?【英文标题】:Freemarker "string to hash conversion"? 【发布时间】:2015-03-20 11:56:55 【问题描述】:

我有一个宏以哈希格式(键/值)打印字符串,当我在 spring 宏 freemarker 中使用这个值时会抛出错误。

这是一个例子

<@getContent /> - prints this string "yes":"yes","no":"no"

<#assign yesNoMap><@getContent /></#assign>

<@spring.formRadioButtons "model.somename" yesNoMap />

基本上我使用弹簧宏来构造单选按钮,而这些标签和值是动态来自宏的。

spring 宏抛出一个错误,它没有将变量“yesNoMap”识别为哈希。

谁能帮我将宏中的字符串打印转换为哈希?

谢谢

【问题讨论】:

你试过?eval吗? 是的,我使用了 eval,freemarker 抛出错误“Expression & expected....” 这里是 excat 错误信息:freemarker.core.ParseException: Encountered "&" 这个"yes":"yes","no","no"应该是"yes":"yes","no":"no"吗? 你是对的,应该是 "yes":"yes","no":"no" 那是我的错误 【参考方案1】:

虽然这不是标题中问题的答案,但我认为以下内容将解决您的实际问题。

您可以首先将自定义的 yes-no-map 作为哈希返回,通过定义函数而不是宏,避免将其从字符串转换为哈希。虽然宏仅呈现文本输出(然后由 &lt;#assign&gt; 指令捕获),但函数可以返回类型化值,在您的情况下为哈希。

<#function getContent>
  <#return 
    "yes": "yes",
    "no": "no"
  >
</#function>

现在可以在任何表达式中调用此函数,例如分配给您想要的变量:

<#assign yesNoMap = getContent()>

<@spring.formRadioButtons "model.somename" getContent() />

甚至直接在spring宏的调用中使用:

<@spring.formRadioButtons "model.somename" getContent() />

【讨论】:

以上是关于Freemarker“字符串到哈希转换”?的主要内容,如果未能解决你的问题,请参考以下文章

无法正确解析FreeMarker视图

开源代码生成器,基于mybatis-generator扩展,结合freemarker

FreeMarker:Java模板引擎

Apache FreeMarker

Spring Boot??????????????????FreeMarker??????????????????

freemarker 笔记