Grails GSP中<g:set>计数器出现问题

3
我试图使用Grails 1.3.7文档中的g:set示例对一组值进行求和,但似乎g:set将整数视为字符串。 对于${grossScore.score}的值[5, 5, 4, 4],总和应该是18,但实际上总和为5544。
<g:set var="totalScore" value="0"/>
<g:each var="grossScore" in="${Score.findAllByScorecard(cardGross)}">
    <g:set var="totalScore" value="${totalScore + grossScore.score}"/>
</g:each>
2个回答

7
另一个选项是确保totalScore是整数,如下所示:
<g:set var="totalScore" value="${0}"/>

我相信这将强制totalScore成为一个整数,因此您不必担心连接而不是加法。


1
如果你知道grossScore.score的值是一个整数,那么你可以直接交换两个数进行加法运算:
<g:set var="totalScore" value="${grossScore.score + totalScore}"/>

通常情况下,操作的左手确定操作的类型(如果存在的话)。由于您在左手边有totalScore,并且它只是一个对象(g:set的默认值),因此将使用默认的Object.plus()操作,该操作与String非常相似。
如果您将grossScore.score作为左侧,则应尝试使用Integer.plus(),这将给您所需的结果。

grossScore.score 是一个 Short 类型,在表达式中将其放在第一位仍然会得到字符串连接。我注意到 Shorts 存在其他问题,需要显式转换,而不像 Integers 那样隐式转换。 - SeattleStephens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接