Struts2 OGNL添加/类型强制

Struts2 OGNL添加/类型强制,struts2,ognl,type-coercion,Struts2,Ognl,Type Coercion,最终是我需要执行的语句。我把它放在一个s:if标记中,我使用test来查看这个值是否在某个范围内 最终,我得到的是字符串连接而不是加法,因为OGNL不将加法的两侧视为数字类型。我明白了,在做一些小修补 %{control.current + #displayRows} 确实会导致数字相加,因此先前在s:set标记中设置的displayRows值实际上被视为非数字值。这是我的s:set标签: %{control.current + control.current} 这些设置表示Java中的

最终是我需要执行的语句。我把它放在一个s:if标记中,我使用test来查看这个值是否在某个范围内

最终,我得到的是字符串连接而不是加法,因为OGNL不将加法的两侧视为数字类型。我明白了,在做一些小修补

%{control.current + #displayRows}
确实会导致数字相加,因此先前在s:set标记中设置的displayRows值实际上被视为非数字值。这是我的s:set标签:

%{control.current + control.current}

这些设置表示Java中的映射。而键总是一个字符串。。。好。。。该值并不总是整数,因为正在存储分类的应用程序设置。所以我们能为值类型做的最好的事情就是对象。我相信这就是问题所在。OGNL不认为这是可以自动转换为数字类型的东西

我已经阅读了langauge指南,其中解释了其中的一些概念,但我没有看到告诉OGNL“是的,这个displayRows包含15的值实际上是一个整数”的方法。有没有办法做到这一点。我需要能够动态地进行加法,这样我就不能在Javaland中创建其他属性来帮助我。我已经研究了OGNL、s:set标记和Java级别,但我没有找到一个合适的位置来实现这一点。

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

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

这里是my struts.xml供参考,最后一个常量标记是您需要添加到的:

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

然后在jsp中执行如下操作:

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

显示:246

最好在set标记中进行转换:

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

那么



将按预期进行。

我也在这里寻找一些,看看是否有任何东西适用于我的情况。让我困惑的是一些Object类型的映射值应该被转换,而有些不应该。谢谢,我在你发布的同一时间得到了答案。我必须
并使用
@java.lang。Integer@parseInt(#displayRows)
就像你说的那样。我终于从电视上看到了。我当然会给你一个公认的答案,谢谢。只是最后一个关于这个问题的思考。。。有趣的是,+是如何被自动视为串联的,因为如果您执行%{control.current---(control.current)}之类的操作,它将被视为加法。我并不是说这是一种好的做法,但这是解决问题的一种方法。
<s:set name="displayRows" value="@java.lang.Integer@valueOf(#application['app_settings'].settings['MAX ACCESS FIELD TITLES ROWS'])" />
<s:property value="control.current + #displayRows"/>