尝试在 EL 中连接字符串时的数字格式异常



这是我试图生成的:

<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>

这在 NumberFormatException 中失败,因为 EL 解释器尝试将"图像/地图"转换为数字。经过相当多的搜索,我发现+仅用于添加数字。任何想法如何达到预期的结果?

EL 不将+运算符识别为字符串连接运算符。+运算符在 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>而不是Facelet <ui:param>

您可以使用concat函数在 JSP EL 中连接字符串。在您的示例中,这将是:

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

相关内容

  • 没有找到相关文章

最新更新