天天看点

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,如需转载请自行联系原作者