2012-04-05 116 views
1

我想在JSP頁面中有一個來自bean的默認值,但我無法獲取expresion來提取值。我正在與工作的一個例子JSP是屬性標籤(struts2)的默認值

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ taglib prefix="s" uri="/struts-tags" %> 

<html> 
    <head> 
     <title> Testing OGNL conversions </title> 
    </head> 
    <body> 
     The data stored is 
     <s:property value="dataField" /><br/> 
     The property of thisdata is 
     <s:property value="thisdata" default="%{dataField}" /><br/> 
     <s:property value="dataField" /> 
    </body> 
</html> 

我得到以下輸出

The data stored is YES 
The property of thisdata is %{dataField} 
YES 

假設struts.xml中和類是否正確(如,因爲正在打印的YES被,如所預期,他們應該是)我怎樣才能得到默認值拉從dataField(是的,我知道愚蠢的名字,但對於測試代碼它適用於我)

dataField存在於bean中,但此數據不存在(這樣做是爲了讓我可以打印默認值)

回答

4

未針對OGNL評估媒體資源標記的默認參數。

所以,你可以使用Struts如果/ ELSEIF /其他標記(或JSTL等效):

<s:if test="somevar1 == null"> 
     <s:property value="someVar2"/> 
    </s:if> 
    <s:else> 
     <s:property value="someVar1"/> 
    </s:else> 

OGNL在價值屬性進行評估,因此三元節省了大量的空間:

<s:property value="somevar1 == null?someVar2:someVar1"/> 

值得注意的是...屬性標記的value屬性最初設置爲動作類(在迭代器中它將成爲您期望的),所以通常需要將value屬性設置爲默認值按預期工作,如果未提供,則標籤輸出與0123相同

0

我做了Struts2一段時間後,所以不完全確定,但試試這個。

s:property標記的documentation提到當value不存在時使用default。因此,請嘗試刪除value媒體資源,並且只有default="%{datafield}"

+0

第二件事情第一件它回來了與上面的%{dataField}的地方錯誤的價值,它回來了NO,這是我從我在書中讀到的理解Struts2在行動是如果返回值的屬性是NULL,那麼struts將使用默認值(因爲它上面只是沒有評估它)現在看起來它正在被錯誤地評估(只有2個可能的值是YES和NO,並且getDataFeild函數只返回值沒有處理它)所以現在的問題是你可以有一個值,爲什麼它有錯誤的值這一次 – mpop 2012-04-05 19:48:17

+1

返回值'值'不是'NULL',因爲你正在爲'價值'領域。至於錯誤的價值,你最好確保你的getter/setter中的所有東西都是正確的。 – Omnipresent 2012-04-05 19:52:20

+0

另一個問題,數據類型是否使用自定義轉換的事實是否會影響默認工作方式? (因此,這兩個值是YES和NO,但真正在對象中它只是布爾值)? – mpop 2012-04-05 20:08:11