logic:empty和logic:notEmpty
logic:empty標籤判斷指令碼變數是否為null,是否是一個空的字串(長度為0),是否是一個空的collection或map(調用isEmpty()方法來判斷)。logic:notEmpty標籤類似。
<logic:empty name="myBean"> The bean is missing </logic:empty> <logic:notEmpty name="myBean"> The bean is not missing </logic:notEmpty> |
上段代碼錶示當一個名為myBean的bean在所有的scope中都不存在時,輸出The bean is missing;存在的話輸出The bean is not missing。 此標籤有三個屬性:name、property和scope。 --------------------------------------------------------------- logic:present 和 logic:empty他們的用法大致相同,唯一的不同點是:兩者在對Null 字元串的處理上存在著不同。
下面為index.jsp中的代碼: 1 <logic:notPresent name="users"> 2 notpresent 3 </logic:notPresent> 4 <logic:notEmpty name="users"> 5 notempty 6 </logic:notEmpty> 7 <logic:empty name="users"> 8 empty 9 </logic:empty> 10 <logic:present name="users"> 11 present 12 </logic:present>
當第一次訪問該JSP的時候,由於users沒有定義,並且也不在page,request,session,application任何一個範圍中,因此輸出的結果為notpresent,empty。
下面我們增加一個action,讓他在index.jsp之前執行,然後再跳轉到index.jsp中,同時在該action的execute方法中增加如下代碼: 1String userName = ""; 2request.setAttribute("users", userName); 3return new ActionForward("/index.jsp"); 4這裡將userName儲存在request中,key為users,再將請求轉寄至index.jsp中,但是userName的值為一個Null 字元串,轉寄過後,輸出的值為:empty,present
這裡我們再做一次改動,將action的execute方法中的代碼改為: 1String userName = null; 2request.setAttribute("users", userName); 3return new ActionForward("/hello.jsp"); 4不同的是userName 不再為空白字串了,而是null值,當轉寄至index.jsp後,輸出的值為:notpresent,empty 。
對比這幾次改動,我們可以得出結論:
對於沒有在page,request,session,application中定義或者是沒有分配記憶體空間(null值)的變數,這兩個標記處理的方法是一致的,都會認為此變數不存在(notpresent)或者為空白(empty)。而對於Null 字元串""值,他們的處理就不一樣了,logic:present 標記認為空白字串仍然是存在的,也就是說,只要是引用了一塊記憶體空間的變數,logic:present 就會返回present ;而logic:empty則認為空白字串仍然為空白,由此得出,在logic:empty看來,變數不僅僅要引用一塊記憶體空間,而且該地址空間的值不可為空字串,否則都認為該變數為空白,都會返回empty |