天天看點

EL表達式自定義函數的簡單學習

定義标簽類,裡面的方法必須是static靜态的方法:

<code>package</code> <code>com.hanchao.el;</code>

<code>import</code> <code>java.text.SimpleDateFormat;</code>

<code>import</code> <code>java.util.Date;</code>

<code>import</code> <code>com.hanchao.entity.User;</code>

<code>/**</code>

<code> </code><code>* 自定義EL表達式</code>

<code> </code><code>* 注意事項:方法必須是static的靜态方法</code>

<code> </code><code>* @author liweihan ([email protected])</code>

<code> </code><code>* @version 1.0 (2014年11月14日 下午2:20:57)</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>MyElTag {</code>

<code>    </code><code>/**</code>

<code>     </code><code>* 用來驗證使用者名是否為admin </code>

<code>     </code><code>* [僅僅是測試,無意義]</code>

<code>     </code><code>* @param user   實體類User</code>

<code>     </code><code>* @return</code>

<code>     </code><code>* </code>

<code>     </code><code>* 2014年11月14日 下午2:27:14</code>

<code>     </code><code>* liweihan</code>

<code>     </code><code>*/</code>

<code>    </code><code>public</code> <code>static</code> <code>boolean</code> <code>checkUsername(User user) {</code>

<code>        </code><code>if</code> <code>(user.getName().equals(</code><code>"admin"</code><code>)) {</code>

<code>            </code><code>return</code> <code>true</code><code>;</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>false</code><code>;</code>

<code>    </code><code>}</code>

<code>    </code> 

<code>     </code><code>* 字元串反轉</code>

<code>     </code><code>* @param str 需要反轉的字元串</code>

<code>     </code><code>* 2014年11月14日 下午2:30:00</code>

<code>    </code><code>public</code> <code>static</code> <code>String reverse(String str) {</code>

<code>        </code><code>return</code> <code>new</code> <code>StringBuffer(str).reverse().toString();</code>

<code>     </code><code>* 傳回字元串去掉前後空格的字元長度</code>

<code>     </code><code>* @param str</code>

<code>     </code><code>* 2014年11月14日 下午2:31:17</code>

<code>    </code><code>public</code> <code>static</code> <code>int</code> <code>countStr(String str) {</code>

<code>        </code><code>return</code> <code>str.trim().length();</code>

<code>     </code><code>* 格式化日期</code>

<code>     </code><code>* @param date       日期</code>

<code>     </code><code>* @param pattern    格式</code>

<code>     </code><code>* 2014年11月14日 下午3:33:33</code>

<code>    </code><code>public</code> <code>static</code> <code>String formatTime(Date date ,String pattern) {</code>

<code>        </code><code>SimpleDateFormat simpleDateFormat = </code><code>new</code> <code>SimpleDateFormat(pattern);</code>

<code>        </code><code>return</code> <code>simpleDateFormat.format(date);</code>

<code>}</code>

<code>在WEB-INF下面建立一個tld檔案:</code>

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code><code>?&gt;</code>

<code>&lt;</code><code>taglib</code> <code>xmlns</code><code>=</code><code>"http://java.sun.com/xml/ns/j2ee"</code>

<code>  </code><code>xmlns:xsi</code><code>=</code><code>"http://www.w3.org/2001/XMLSchema-instance"</code>

<code>  </code><code>xsi:schemaLocation</code><code>=</code><code>"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"</code>

<code>  </code><code>version</code><code>=</code><code>"2.0"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 定義函數的版本 --&gt;</code>

<code>    </code><code>&lt;</code><code>tlib-version</code><code>&gt;1.0&lt;/</code><code>tlib-version</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>short-name</code><code>&gt;el&lt;/</code><code>short-name</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 定義函數的名稱  →</code>

<code>    </code><code>&lt;short-name&gt;myel&lt;/short-name&gt;</code>

<code>     </code><code>--&gt;</code>

<code>    </code><code>&lt;</code><code>uri</code><code>&gt;http://so.tv.sohu.com/custom/functions&lt;/</code><code>uri</code><code>&gt; </code>

<code>      </code> 

<code>      </code><code>&lt;!-- 定義頂一個函數 --&gt;</code>

<code>      </code><code>&lt;</code><code>function</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 函數描述 --&gt;</code>

<code>          </code><code>&lt;</code><code>description</code><code>&gt;check isOrNot admin&lt;/</code><code>description</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 函數名  → 注意:此處的名字和JSP頁面上名字一樣!</code>

<code>          </code><code>&lt;name&gt;checkUsername&lt;/name&gt;</code>

<code>          </code><code>--&gt;</code>

<code>          </code><code>&lt;</code><code>name</code><code>&gt;check&lt;/</code><code>name</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 定義函數處理類 --&gt;</code>

<code>          </code><code>&lt;</code><code>function-class</code><code>&gt;com.hanchao.el.MyElTag&lt;/</code><code>function-class</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 函數參數說明 --&gt;</code>

<code>          </code><code>&lt;</code><code>function-signature</code><code>&gt;</code>

<code>              </code><code>boolean checkUsername(com.hanchao.entity.User)</code>

<code>          </code><code>&lt;/</code><code>function-signature</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 例子 --&gt;</code>

<code>          </code><code>&lt;</code><code>example</code><code>&gt;${el:check(user)}&lt;/</code><code>example</code><code>&gt;</code>

<code>      </code><code>&lt;/</code><code>function</code><code>&gt;</code>

<code>      </code><code>&lt;!-- 反轉一個字元串 --&gt;</code>

<code>          </code><code>&lt;</code><code>description</code><code>&gt;reverse a String&lt;/</code><code>description</code><code>&gt;</code>

<code>          </code><code>&lt;</code><code>name</code><code>&gt;reverse&lt;/</code><code>name</code><code>&gt;</code>

<code>              </code><code>java.lang.String reverse(java.lang.String)</code>

<code>      </code><code>&lt;!-- 去掉前後空格後傳回一個字元串的長度 --&gt;</code>

<code>          </code><code>&lt;</code><code>description</code><code>&gt;get a String'length&lt;/</code><code>description</code><code>&gt;</code>

<code>          </code><code>&lt;</code><code>name</code><code>&gt;len&lt;/</code><code>name</code><code>&gt;</code>

<code>              </code><code>java.lang.Integer countStr(java.lang.String)</code>

<code>      </code><code>&lt;!-- 格式化日期 --&gt;</code>

<code>          </code><code>&lt;</code><code>description</code><code>&gt;formate date or time&lt;/</code><code>description</code><code>&gt;</code>

<code>          </code><code>&lt;</code><code>name</code><code>&gt;format&lt;/</code><code>name</code><code>&gt;</code>

<code>              </code><code>java.lang.String formatTime(java.util.Date,java.lang.String)</code>

<code>  </code> 

<code>&lt;/</code><code>taglib</code><code>&gt;</code>

4.在web.xml中加入jsp-fig的配置

<code>  </code><code>&lt;!-- 自定義EL表達式 --&gt;</code>

<code>  </code><code>&lt;</code><code>jsp-config</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>taglib</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 定義标簽的引用位址,JSP頁面時會用到  ,</code>

<code>          </code><code>和tld檔案的位址保持一緻!但是tld檔案中可以省略不寫--&gt;</code>

<code>          </code><code>&lt;</code><code>taglib-uri</code><code>&gt;/myeltag&lt;/</code><code>taglib-uri</code><code>&gt;</code>

<code>          </code><code>&lt;!-- 配置标簽的TLD檔案位址 --&gt;</code>

<code>          </code><code>&lt;</code><code>taglib-location</code><code>&gt;/WEB-INF/myel.tld&lt;/</code><code>taglib-location</code><code>&gt;</code>

<code>      </code><code>&lt;/</code><code>taglib</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>jsp-config</code><code>&gt;</code>

5.JSP頁面中使用:注意事項如下:

<code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;</code>

<code>&lt;%@ page import="com.hanchao.entity.User" %&gt;</code>

<code>&lt;%@ page import="java.util.Date" %&gt;</code>

<code>&lt;%@ taglib uri="/myeltag" prefix="m"%&gt;</code>

<code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Content-Type"</code> <code>content</code><code>=</code><code>"text/html; charset=UTF-8"</code><code>&gt;</code>

<code>&lt;</code><code>title</code><code>&gt;自定義EL表達式的簡單學習&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>h1</code><code>&gt;EL表達式的簡單學習&lt;/</code><code>h1</code><code>&gt;</code>

<code>    </code><code>&lt;%</code>

<code>        </code><code>User user = new User();</code>

<code>        </code><code>user.setName("admin1");</code>

<code>        </code><code>request.setAttribute("user", user);</code>

<code>        </code><code>pageContext.setAttribute("name"," 123456");</code>

<code>        </code><code>application.setAttribute("date", new Date());</code>

<code>    </code><code>%&gt;</code>

<code>    </code><code>&lt;%--</code>

<code>        </code><code>注意事項:</code>

<code>        </code><code>1.checkUsername的值來源于tld檔案的fucntion标簽下的name的值!!</code>

<code>        </code><code>2.myel的值與tld檔案的short-name标簽裡面的值貌似關系不大!</code>

<code>          </code><code>我們隻需要在引入時定義prefix="xx",使用時${xx:}</code>

<code>        </code> 

<code>       </code><code>${myel:checkUsername(user) }</code>

<code>     </code><code>--%&gt;</code>

<code>     </code> 

<code>     </code><code>${m:check(user) }</code>

<code>     </code><code>&lt;</code><code>hr</code> <code>/&gt;</code>

<code>     </code><code>${m:reverse(name) }</code>

<code>     </code><code>${m:len(name) }</code>

<code>     </code><code>${m:format(date,"yyyy-MM-dd") }</code>

<code>     </code><code>&lt;%--</code>

<code>       </code><code>參考文章:</code>

<code>       </code><code>http://954151190.iteye.com/blog/626727</code>

<code>       </code><code>http://blog.sina.com.cn/s/blog_780a632b0100wrnq.html</code>

<code>      </code><code>--%&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

     本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1576557,如需轉載請自行聯系原作者