Java 如何将velocity表达式转换为JSP?
我有一个页面,我正在从Velocity转换为JSP。我有一些复杂的表达式,我不知道如何转换成JSTLEL语言Java 如何将velocity表达式转换为JSP?,java,jsp,velocity,Java,Jsp,Velocity,我有一个页面,我正在从Velocity转换为JSP。我有一些复杂的表达式,我不知道如何转换成JSTLEL语言 #set ($col = 0) #foreach ($hour in $form.bean.grid.hours) $hour.cells.get($col).hourOfDay #set ($col = $col + 1) #end 小时是一个对象,它包含一个单元格,该单元格包含一个列表。我需要通过数字索引获取每个元素 有什么想法吗?比如: <c:set var="c
#set ($col = 0)
#foreach ($hour in $form.bean.grid.hours)
$hour.cells.get($col).hourOfDay
#set ($col = $col + 1)
#end
小时是一个对象,它包含一个单元格,该单元格包含一个列表。我需要通过数字索引获取每个元素
有什么想法吗?比如:
<c:set var="col" value="0"/>
<c:forEach items="${form.bean.grid.hours}" var="hour">
${hour.cells[col].hourOfDay}
<c:set var="col" value="${col + 1}"/>
</c:forEach>
${hour.cells[col].houroday}
只有当hour.cells
是一个Map
时,这才有效,因此原始的cells.get($col)
表达式正在调用该Map
上的get()
。如果它是一个任意方法调用,那么它将不起作用,因为JSPEL只能处理bean属性或集合
正如@EliteGeterman所指出的,您可以使用
forEach
循环上的varStatus
来消除对单独循环计数器的需要,您应该这样做。我的片段是更直译的。基本上,你展示了一天中的几个小时。使用JSTL
<c:forEach items="${form.bean.grid.hours}" var="hour" varStatus="index">
${hour.cells[index.count - 1].hourOfDay}
</c:forEach>
${hour.cells[index.count-1].hourOfDay}
index.count中的
计数
从1开始计数到N(因此用1取反)。啊,灯泡亮了。谢谢我现在明白了EL的工作原理与velocity的不同,而是使用LoopTagStatus#getIndex()
,即在给定示例中使用index.index
。它是基于0的,不需要用1减去它。Javadoc here:为了避免混淆,我将varStatus
声明为loop
。即${foo[loop.index]}
。更多的自我解释。谢谢BalusC,很明显你有时间为每个java问题提供建议-D