logic:messagesPresent

logic:messagesPresent標籤的典型用法:

 

<logic:messagesPresent>
         <ul>
                  <html:
messages id="message">
                             <li><bean:write
name="message"/></li>
                  </html:messages>
         </ul>
</logic:messagesPresent>

 

logic:messagesPresent標籤用於以下情況:
request作用域中存在一個ActionMessages對象,標籤的property屬性和ActionMessages中的property對應。 request作用域中存在一個ActionErrors對象,標籤的property屬性和ActionErrors中的property對應。 存在一個String對象,將其轉換(構造)ActionMessage然後在添加到ActionMessages中。

存在一個String Array對象,將數組中的每一個String轉換成一個ActionMessage,在將其添加到ActionMessages中。 標籤的message屬性值爲true時將以Globals.MESSAGE_KEYkeyrequest作用域中查找Message,其它情況下,將name的值作爲key查找,如果name 沒有出現,默認值爲Globals.ERROR_KEY

html:message 可以讓你向用戶顯示錯誤信息(默認)或消息信息,而html:errors 只顯示錯誤信息。很明顯,錯誤信息或消息信息一定要保存在request裏,否則就什麼也不會顯示。

Ref:

[1]http://struts.apache.org/1.x/struts-taglib/tlddoc/index.html

[2]http://www.diybl.com/course/3_program/java/javajs/2008711/132741.html

 

<logic:messagesPresent property="property1" message="true"> Message:property1 存在 </logic:messagesPresent>

我們知道,在Action類中我們可以通過將一個ActionErrorsActionMessages對象添加進request scope

saveMessages(request, msgs);

Globals.MESSAGE_KEY(值爲org.apache.struts.action.MESSAGE”)作爲鍵。

 

saveErrors(request, msgs);

Globals.ERROR_KEY(值爲org.apache.struts.action.ERROR”)作爲鍵。

 

<logic:messagesPresent/> 標籤就是用來檢測在request scope內,有沒有以名爲Globals.MESSAGE_KEYGlobals.ERROR_KEYErrors/Messages對象。

 

該標籤的message屬性,指定檢測在那裏進行。(Globals.ERROR_KEY缺省  Globals.MESSAGE_KEY 設爲true

 

如:<logic:messagesPresent property="property1">

就是檢測在request scope中有沒有一個名爲:org.apache.struts.action.ERROR” 也就是Globals.ERROR_KEY的值,的對象,而在該對象中,有沒有一個名爲”property1”的屬性。

 

如:<logic:messagesPresent property="property1" message="true">

就是檢測在request scope中有沒有一個名爲:org.apache.struts.action.Message” 也就是Globals.MESSAGE_KEY的值,的對象,而在該對象中,有沒有一個名爲”property1”的屬性。

 

其實我們在後臺通過 saveErrors(request, msgs); 就相當於

request.setAttribute(Globals.ERROR_KEY, msgs);

之所以用saveErrors方法,就是簡化操作,讓我們不用爲這個對象命名,使用default的名字,從而前臺logic:messagesPresent標籤中也不用指定name屬性,因爲在屬性message不是true的情況下,該標籤默認認爲,我們就是來檢測名爲 Globals.ERROR_KEY的對象。

所以,如果我們在後臺 request.setAttribute("MyErrors", msgs);

而前臺 <logic:messagesPresent name="MyErrors" property="property1">

指定屬性name,是一樣可以進行判斷的。

 

而當message屬性爲true的時候,標籤就會忽略name屬性,只檢測名爲 Globals.MESSAGE_KEY的對象。這種情況我們就只能以這個default的名字來命名存儲在request scope中的對象。

 

可爲什麼我們一定要用struts默認的名字(Globals.ERROR_KEY/Globals.MESSAGE_KEY)呢?因爲我們只檢測是否存在是不夠的。對於messages或者errors我們更重要的是來顯示它的信息(叢rescources裏面獲取)一般用<html:messages/>或者<html:errors/>。而這兩個標籤,默認都是得到名爲Globals.ERROR_KEYGlobals.MESSAGE_KEY的對象。當然我們通過指定name屬性,也可以得到我們自定義的名字。但問題是它將無法從我們自定義名字的對象中獲得屬性,也就是說你不能指定property,因爲你自定義的名字無法映射到它所包含的對象中的屬性(也就是沒有getter()方法)。而如果用default的命名方式(Globals.ERROR_KEYGlobals.MESSAGE_KEY) struts就會建立這種對象與屬性之間的映射。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章