【问题标题】:Length of Assign variable issue in freemarkerfreemarker中分配变量问题的长度
【发布时间】:2019-11-10 08:41:59
【问题描述】:

我正在使用 freemarker ..想找到分配变量的长度 ..我使用了 size 和 length 函数 ..但它失败并返回错误 ..请帮助我如何找到分配变量的长度

请找到我尝试过的以下代码...

输入数据 --- cusID="a-1242" -- 我想通过 - 分割输入数据并希望通过赋值函数存储在单独的变量中

 <#list (it.@CusID[0]!"")?split("-") as c><#if ((c?index) ==0)>
<#assign first>${c}</#assign>
<#assign firstlen = c?size>
</#if>
 </#list>

上面的代码firstlen是用来找长度的,但是找不到长度

错误信息在下面找到

对于“?size”左侧操作数:需要扩展散列或序列 或扩展集合,但这已评估为 markup_output (包装器:f.c.TemplateXMLOutputModel):

【问题讨论】:

  • 你试过长度吗?
  • 是的,也检查了长度函数..它也返回错误..
  • 顺便说一句,(it.@CusID[0]!"")?split("-")可以直接写成it.@CusID[0]!""?split("-"),也可以直接写成it.@CusID[0]!?split("-")
  • 并且,&lt;#if ((c?index) ==0)&gt; 可以写成&lt;#if c?index == 0&gt;。 (在有人说粗鲁之前,(:我也回答了下面的问题......)

标签: freemarker smooks


【解决方案1】:

正如错误消息所说,first 存储 XML 标记,而不仅仅是纯文本字符串。您无法使用?length 获得标记的长度,因为这意味着什么并不明显(例如哪些 XML 元素的内容很重要,如果您有实体引用会怎样,等等)。它是标记的原因是 &lt;#assign first&gt;...&lt;/#assign&gt; 不是一个正常的分配,它用于捕获输出,并且您使用的是 XML 输出格式。相反,使用正常的赋值:&lt;#assign first = c&gt;。现在first 将具有与c 相同的类型,字符串。

【讨论】:

  • 嗨 ddekany,非常感谢......你的建议 就像一个奇迹......太好了......如果可能的话,请分享你的任何 freemarker 博客以了解更多......跨度>
  • 官方文档和 StackOverflow 是最好的来源......而且try.freemarker.apache.org 可以非常方便。请注意,如果它解决了您的问题,您应该“接受”答案。
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2020-01-08
  • 2021-02-09
相关资源
最近更新 更多