gpt4 book ai didi

struts2 - OGNL 加法/类型强制

转载 作者:行者123 更新时间:2023-12-02 10:26:50 28 4
gpt4 key购买 nike

%{control.current + #displayRows}

最终是我需要执行的语句。我将其放在 s:if 标记中,并使用 test 来查看该值是否在特定范围内。

最终,我得到的是字符串连接而不是加法,因为加法的两边都不被 OGNL 视为数字类型。做了一些修改,我明白了

%{control.current + control.current}

确实会导致数字相加,因此实际上之前在 s:set 标记中设置的 displayRows 值被视为非数字值。这是我的 s:set 标签:

<s:set name="displayRows" value="%{#application['app_settings'].settings['MAX ACCESS FIELD TITLES ROWS']}" />

这些设置代表 Java 中的 map 。而键始终是字符串......好吧......值并不总是整数,因为正在存储各种应用程序设置。所以对于值类型我们能做的最好的事情就是Object。我相信这就是问题所在。 OGNL 并不认为这是可以自动转换为数字类型的东西。

我已阅读 http://incubator.apache.org/ognl/language-guide.html 上的语言指南它解释了其中一些概念,但我没有找到一种方法来告诉 OGNL“是的,这个包含 15 值的 displayRows 确实是一个整数”。有没有办法让这种情况发生。我需要能够即时添加,因此我无法在 Javaland 中创建其他属性来帮助我。我查看了 OGNL、s:set 标记和 Java 级别,但没有看到可以实现此目的的合适位置。

最佳答案

当我们需要它作为整数时,Struts 认为 #displayRows 是一个字符串(我假设是整数,您将能够将以下内容应用于任何内置类型)。

首先在struts.xml中开启静态方法访问。

这里是我的 struts.xml 供引用,最后一个常量标记是您需要添加到您的标记中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.date.format" value="0,date,dd.MM.yyyy"/>
<constant name="format.date" value="{0,date,dd.MM.yyyy}"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
</struts>

然后在你的jsp中你会做类似的事情:

<s:property value='@java.lang.Integer@valueOf("123") + @java.lang.Integer@valueOf("123")' />

显示:246

在 set 标签中进行转换可能会更好:

<s:set name="displayRows" value="@java.lang.Integer@valueOf(#application['app_settings'].settings['MAX ACCESS FIELD TITLES ROWS'])" />

那么,

<s:property value="control.current + #displayRows"/>

将按预期运行。

关于struts2 - OGNL 加法/类型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com