2011-06-15 82 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