2011-06-15 83 views
3
%{control.current + #displayRows} 

最终是我需要执行的声明。我在s中使用它:如果标签和我使用测试来查看这个值是否在一定范围内。OGNL添加/类型强制

最终,我得到字符串连接而不是加法,因为加法的两边都不被OGNL视为数字类型。做一个小的修修补补,我看到

%{control.current + control.current} 

不会导致数值除,所以确实这是在一个s设定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“是的,这个displayRows包含的值是15 REALLY是一个整数”。有没有办法做到这一点。我需要能够实时添加,因此我无法在Javaland中创建其他属性来帮助我。我已经看过OGNL,s:set标签和Java级别,我没有看到一个合适的位置来实现这一点。

+0

我也在这里看一些http://struts.apache.org/2.2.3/docs/type-conversion.html看看是否有任何适用于我的情况。让我感到困惑的部分是Object类型的一些Map值应该被转换,而另一些则不应该。 – demongolem 2011-06-15 17:21:25

回答

6

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='@[email protected]("123") + @[email protected]("123")' /> 

该款显示器:246

它可能会更好做在设置标签的转换:

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

然后,

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

预期行为。

+0

谢谢,我在你发布的同一时间得到答案。我必须用''并且像你所说的那样使用@ java.lang.Integer @ parseInt(#displayRows)。我终于从http://icehanger.blogspot.com/2009/04/struts-2-ognl-variable-evaluation.html看到它。我当然会给你接受的答案,谢谢。 – demongolem 2011-06-15 17:42:59

+2

关于这个问题最后只有一个想法......有趣的是,+自动被视为串联,因为如果你做了类似于%{control.current - (control.current)}的事情,它将被视为加法。我并不是说这是一个好的做法,但是这是解决问题的方法之一。 – demongolem 2011-07-11 21:02:41