我想用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):
有人可以找到问题所在。
model.put("activities", activities);
model.put("skills", skills);
model.put("x", x);
model.put("y", y);
答案 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
。