1 回答

TA貢獻1804條經驗 獲得超8個贊
#、%和$符號在OGNL表達式中經常出現.1.#符號的用途一般有三種。1)訪問非根對象屬性,例如示例中的#session.msg表達式,由于Struts 2中值棧被視為根對象,所以訪問其他非根對象時,需要加#前綴。實際上,#相當于ActionContext. getContext();#session.msg表達式相當于ActionContext.getContext().getSession(). getAttribute(”msg”) 。2)用于過濾和投影(projecting)集合,如示例中的persons.{?#this.age>20}。3)用來構造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。 (2)%符號%符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值。
在Struts 2框架的各種配置文件(validation.xml或struts.xml)中引用OGNL表達式,例如下面的代碼片斷所示:<validators><field name=”intb”><field-validator type=”int”><param name=”min”>10</param><param name=”max”>100</param><message>BAction-test校驗:數字必須為${min}為${max}之間!</message> //其值則上面的參數</field-validator></field></validators> (4) <h2><s:text name="HelloWorld"/></h2> <h2><s:property value="%{getText('HelloWorld')}"/></h2>上面的例子用了兩種方法來顯示國際化字符串,其輸出是相同的。其實,這就是Struts 2.0的一個優勢,因為它默認支持EL,所示我們可以用getText方法來簡潔地取得國際化字符串。另外更普遍的情況——在使用UI表單標志時, getText可以用來設置label屬性。
添加回答
舉報