这就是我想要生成的:

<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/1.png?ln=images/map') no-repeat center top;"></div>
<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/2.png?ln=images/map') no-repeat center top;"></div>
<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/3.png?ln=images/map') no-repeat center top;"></div>

etc...


这是我的代码:

<ui:repeat value="#{myBean.items}" var="item" varStatus="status">
    <h:panelGroup layout="block" styleClass="marker" style="background:transparent url(#{resource['images/map:'+(status.index+1)+'.png']} no-repeat center top;"/>
</ui:repeat>


由于EL解释器尝试将“图像/地图”转换为数字,因此出现NumberFormatException失败。搜索了很多之后,我发现+仅用于加数字。任何想法如何达到预期的结果?

最佳答案

EL无法将+运算符识别为String串联运算符。 +运算符最终在EL中仅用于对数字求和。您需要使用<ui:param>创建另一个表达式变量,在其中通过将EL表达式内联到值中来串联部分,然后在最终表达式中使用它。

<ui:repeat value="#{myBean.items}" var="item" varStatus="status">
    <ui:param name="key" value="images/map#{status.index + 1}.png" />
    <h:panelGroup layout="block" styleClass="marker" style="background:transparent url(#{resource[key]} no-repeat center top;"/>
</ui:repeat>


注意:如果使用的是JSP而不是Facelets,则应该使用JSTL <c:set>代替Facelets <ui:param>

10-06 04:33