尝试在 EL 中连接字符串时出现 NumberFormatException

发布于 2024-11-07 05:52:23 字数 916 浏览 0 评论 0原文

这就是我想要生成的内容:

<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。经过一番搜索,我发现 + 只能用于添加数字。有什么想法如何达到预期的结果吗?

This is what I'm trying to generate:

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

Here's my code:

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

This is failing with a NumberFormatException because the EL interpreter attempts to convert "images/map" to a number. After searching quite a bit, I found that + is only for adding numbers. Any ideas how to achieve the desired results?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

万劫不复 2024-11-14 05:52:24

EL 无法将 + 运算符识别为字符串连接运算符。 + 运算符在 EL 中最终仅用于对数字求和。您需要使用 创建另一个表达式变量,其中通过在值中内联 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 而不是 Facelets

EL does not recognize the + operator as String concatenation operator. The + operator is in EL ultimately to sum numbers only. You need to use <ui:param> to create another expression variable wherein you concatenate the parts by just inlining the EL expression in the value and then use it in the final expression instead.

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

Note: if you were using JSP instead of Facelets, you'd have used JSTL <c:set> instead of Facelets <ui:param>.

可是我不能没有你 2024-11-14 05:52:24

您可以使用 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>

You can use concat function to concatenate strings in JSP EL. In your example that would be:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文