【问题标题】:freemarker error, undefined Expressionfreemarker 错误,未定义的表达式
【发布时间】:2014-05-01 14:48:44
【问题描述】:

我想用 ftl 代码打印一个矩阵,所以我有两个列表活动和技能 一个活动包含一个能力列表,所以如果活动(i)包含技能(i),我将 x 设置在矩阵中的正确位置 这是我的代码

 <div id="menu" class="one whole">
<div class="one sixth">a\c</div>
[#list 1..y as i]
<div class="one sixth">c${i}</div>
[/#list]

[#list 1..x as ss]
<div class="one sixth">a${ss}</div>
   [#assign l = activities[ss].getCompetences()?size]
   [#if l > 0]
   [#assign liste = activities[ss].getCompetences()]
   <li><a href="?3.0.1.0">${activities[16].getCompetences()[1].name}</a></li>
   <li><a href="?3.0.1.0">${activities[16].getCompetences()[0].name}</a></li>
 <li><a href="?3.0.1.0">${activities[17].getCompetences()[1].name}</a></li>
 <li><a href="?3.0.1.0">${activities[17].getCompetences()[0].name}</a></li>

            [#list 1..y as j]
            [#assign vrai = 0]
            [#assign x2 = '${skills[j].name}']
            [#assign l = activities[ss].getCompetences()?size]
                [#list 0..l as element]

                [#assign x1 = '${activities[ss].getCompetences()  [element].name}']

                     [#if x1 == x2]
                     [#assign vrai = vrai+1]
                     [/#if]
                [/#list]
                [#if vrai > 0]      
                     <div class="one sixth">X</div>
                [#else]
                     <div class="one sixth">000</div>  
                [/#if]
             [/#list]
    [#else]
       [#list 1..y as j]
       <div class="one sixth">000</div>
       [/#list]     
     [/#if]    
   [/#list]
   </div>

错误的原因是:freemarker.core.InvalidReferenceException: Expression activities[ss].getCompetences()[element] is undefined on line 25,([#assign x1 = '${activities[ss].getCompetences() [元素].name}'])

但是这个表达式在这里是正确的(a):

  • ${activities[16].getCompetences()[1].name}
  • (b) :
  • ${activities[16].getCompetences()[0].name}
  • 我使用(a)和(b)只是为了测试。

    谁能找出问题所在。

            model.put("activities", activities);
        model.put("skills", skills);
        model.put("x", x);
        model.put("y", y);
    

    【问题讨论】:

      标签: html freemarker


      【解决方案1】:

      根据消息,a[ss] 未定义。所以一种可能性是你没有在 freemarker 模型中设置a。另一种可能性是您的a 列表是从零开始的,而不是从一开始的。您正在迭代 1..x。

      除此之外,您还没有提供足够的信息。考虑提供 freemarker 异常的完整输出,并更清楚地解释 'a' 和 x 包含的内容。

      【讨论】:

      • a和x存在,x是a的大小
      • 但问题是如何从 a 中提取元素以及 a 的元素中的元素。
      • 什么是a?它是一个数组吗?一个列表?它是从零开始的吗?如果是这样,为什么不使用[#list a as aElement] 而不是索引循环呢?如果您继续使用索引循环,那么可能是[#list 0..(x-1) as ss]。同样,您没有提供足够的信息让某人能够提供帮助。
      • 我修改了我的代码,但我无法解决所有问题
      【解决方案2】:

      小心.. 运算符。它的右手操作数被解释为包含,因此使用0..length,您的代码将失败。如果你尝试写0..(length-1),如果length为0,那也会失败,因为它会是[-1, 0]

      另外,如果您列出索引只是为了稍后执行someList[theIndex],那么您做错了。然后,您应该列出列表项,如果需要索引,请使用itemName_index(请参阅http://freemarker.org/docs/ref_directive_list.html#ref.directive.list)。

      “表达式活动[ss].getCompetences()[element]”表示您的索引超出范围,或者在给定索引处的列表中有null

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 1970-01-01
        相关资源
        最近更新 更多