2013-04-29 83 views
2

我有下面的代碼片段一個Struts 2 JSP頁面:OGNL語法問題

<s:property value="%{myVariable}" /> 

其正確打印出的myVariable值。

現在,我想將myVariable傳遞給我的操作中的一個方法,該方法根據myVariable的值計算結果。我嘗試了以下操作:

<s:property value="%{myMethod(myVariable)}" /> 

myMethod的第一行輸出調試語句。有了上面的代碼片段,這個調試語句就沒有打印出來。

然後我嘗試這樣做:

<s:property value="%{myMethod(#myVariable)}" /> 

我調試結印,但myVariable的值是,即使它有一個null值傳遞時,它是通過<s:property value="%{myVariable}" />

印什麼是正確的用於將頁面變量傳遞給Struts 2方法的語法?

+0

請發佈您的jsp文件。 – 2013-04-29 22:58:01

+0

如果這不起作用,那很奇怪。如果您使用自定義標籤,我已經看到了一些奇怪的東西。除此之外,您應該可以使用s:set將變量分配給一個新名稱,並將範圍從一個頁面改爲另一個頁面。你也可以嘗試強制範圍#attr.myVariable(將首先搜索頁面範圍) – Quaternion 2013-04-30 05:57:10

+0

哪種類型是你的'myVariable'和哪種類型需要你的方法? – 2013-04-30 08:13:37

回答

0
<s:property value="%{myMethod(myVariable)}" /> 

是一個正確的語法,但得到的是有一個簽名的方法的價值

public String myMethod(String value){ 
    return value; 
} 

需要吸氣劑myVariable

public String getMyVariable() { 
    return myVariable; 
} 

如果設置象

private String myVariable = "myValue"; 

值以myVariable那麼它應該在JSP被打印。如果參數是其他類型,它將被轉換爲String並且該方法將會調用。

0

我認爲你缺少目標對象,前

<s:property value="%{myTarget.myMethod(myVariable)}" /> 

更多:How to pass parameter to method call in Struts 2 OGNL

+0

我試圖調用的方法在我的Action中。它不是myVariable對象的屬性。在我的行動中,我有execute()和myMethod(String參數)方法。 – 2013-04-29 21:14:24

+0

所以我不是特別確定你的意思是myTarget。這是我的struts行爲的完全合格的路徑(即 - com.web.actions.ViewDataAction)? – 2013-04-29 21:15:34