freemarker错误,未定义表达式

时间:2014-05-01 14:48:44

标签: html freemarker

我想用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:表达式活动[ss] .getCompetences()[element]在第25行未定义,([#assid x1 ='$ {activities [ss] .getCompetences() [element] .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);
    

    2 个答案:

    答案 0 :(得分:0)

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

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

    答案 1 :(得分:0)

    小心..运算符。它的右手操作数被解释为包含,因此使用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