2013-09-24 72 views
0

我花了幾個小時的時間纔得到一個Struts表達式,但我沒有成功。struts ognl動態表達式

我想從字符串執行一個OGNL表達式。

例如,我有以下代碼:

<s:push value="#row"> 

    alert('<s:property value="id + ' ' + id" />'); 

</s:push> 

這工作完全給我對象的ID兩次。

這個例子

<s:push value="#row"> 

    <s:set name="expr" value="id + ' ' + id"/> 
    alert('<s:property value="%{#expr}" />'); 

</s:push> 

正常工作了。

但現在,如果我創造我的行動的方法:

public String getTest() { 

    return "id + ' ' + id"; 
} 

,並在JSP:

<s:set name="expr" value="getTest()"/> 

<s:push value="#row"> 

    alert('<s:property value="%{#expr}" />'); 

</s:push> 

結果是:

alert('id + ' ' + id'); 

這不因報價而工作。

但是,爲什麼在我的最後一個例子中,我有字符串值,而不是評估表達式?

我已經嘗試了很多的可能性,閱讀文章,教程,但沒有找到適合我的問題的答案。

+1

*但是,爲什麼在我的最後一個例子,我有字符串值,而不是表達式計算? *因爲它是一個字符串。 –

+0

看到這個問題:http://stackoverflow.com/q/16712395/1700321。 –

+0

@AleksandrM:你讓我哭了:D –

回答

0

默認情況下,Struts 2會轉義ActionMessages。

嘗試<s:property value="%{#expr}" escape="false"/>

UDPATE

嘗試

alert(<s:property value="%{#expr}" />); 

alert('<s:property value="%{#expr}" />'); 
+0

添加escape =「false」時我沒有區別。 – user2810476

+0

這是一個JavaScript問題,而不是Java – PbxMan

+0

這顯然不是問題,因爲s:屬性被執行並被一個值取代。我不關心Javascript不工作,我問爲什麼s:屬性不會被替換爲與第二個示例相同的值。 – user2810476