Taglib原理和实现:再论El和JSTL标签

js

  问题:你想和JSTL共同工作。比如,在用自己的标签处理一些逻辑之后,让JSTL处理余下的工作。

  看这个JSP例子:

<%
 String name="diego";
 request.setAttribute("name",name);
%>
<c:out value="${name}"/>
......

  许多JSTL标签支持El表达式,所以,只要你在自己的标签内部把值塞进request,其他jstl标签就能使用它们

  下面这个例子,从request里面取得对象,找到它属性的值,塞到request里去。

package diegoyun;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;

public class SetVarTag extends TagSupport
{
 private Object value = null;
 private String property = null;
 private String var = null;
 public void setVar(String var)
 {
  this.var = var;
 }
 public void setProperty(String property)
 {
  this.property = property;
 }
 public void setValue(Object value)throws JspException{
  this.value = ExpressionEvaluatorManager.evaluate( "value", value.toString(), Object.class, this, pageContext);
 }
 public int doEndTag() throws JspException{
  Object propertyValue = null;
  try{
   propertyValue = PropertyUtils.getProperty(value, property);
  }
  catch (Exception e) {
   throw new JspException(e);
  }
  pageContext.setAttribute(var,propertyValue);
  return EVAL_PAGE;
 }
}

  编写TLD

<!--SetVarTag-->
<tag>
<name>set</name>
<tag-class>diegoyun.SetVarTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>

  编写JSP

<%@ page language="java" %>
<%@ page import="diegoyun.vo.*"%>
<%@ taglib uri="/WEB-INF/tlds/diego.tld" prefix="diego"%>
<%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c"%>
<html>
<body bgcolor="#FFFFFF">
<%
 Man man = new Man();
 man.setName("diego");
 request.setAttribute("man",man);
%>
Get value from request and set it's property value into request:<br>
<diego:set value="${man}" property="name" var="myname"/>
 now use OutTag of jstl taglib to get the name:<br>
 value is : <c:out value="${myname}" />

</body>
</html>

  运行,效果如下:

Get value from request and set it's property value into request:
now use OutTag of jstl taglib to get the name:
value is : diego

  结束语

  和JSTL交互是非常有用的技术。在JSTL里提供了许多完成基本功能的标签,如输出,循环,条件选择等。仅在处理自己特定逻辑的时候才实现自己的标签,并提供和jstl交互,能大大提高重用性和减少工作量。

时间: 2024-08-04 07:21:48

Taglib原理和实现:再论El和JSTL标签的相关文章

Taglib原理和实现之支持El表达式

1.先看这么一个例子 <%@ page contentType="text/html; charset=gb2312" language="java"%><%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &

用el和jstl标签的时候出现的错误

问题描述 在写一个小程序的时候出现的错误错误地方大概是这里<jsp:useBeanid="articleBo"class="own.operation.ArticleBo"></jsp:useBean><c:setvar="javaList"value="${articleBo.selectArticleByType(1)}"scope="session"></c:

Taglib原理和实现之El表达式和JSTL标签

1.问题:你想和jstl共同工作.比如,在用自己的标签处理一些逻辑之后,让jstl处理余下的工作. 2.看这个jsp例子: .... <% String name="diego"; request.setAttribute("name",name); %> <c:out value="${name}"/> ...... 许多jstl标签支持El表达式,所以,只要你在自己的标签内部把值塞进request,其他jstl标签就能

Taglib原理和实现

Tag究竟是什么?如何实现一个Tag?     一个tag就是一个普通的java类,它惟一特别之处是它必须继承TagSupport或者BodyTagSupport类.这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出.而这两个类是由jsp容器提供的,无须开发人员自己实现.换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag.并且它自己负责和jsp页面的交互,不用你多操心.     "特别的

Taglib原理和实现之什么是Taglib

1.问题:Tag究竟是什么?如何实现一个Tag? 一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类.这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出.而这两个类是由jsp容器提供的,无须开发人员自己实现.换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag.并且它自己负责和jsp页面的交互,不用你多操心. "特别的工作&

jsp基础与提高(EL、JSTL)

EL表达式 1.1 为什么需要EL表达式和JSP标签 JSP的产生在一定程度上将Servlet中负责表现的功能抽取了出来,但JSP页内嵌入的Java代码也破坏了页面中负责表现的页面结构,特别是当运算逻辑稍微复杂一点的话,那么JSP页面中大量的Java代码增加了页面维护的难度. 所以使用简单的标签来表现复杂的逻辑以及使用简单的形式表现运算的关系就是EL表达式和JSP标签出现的原因. 1.2. 什么是EL表达式 一套简单的运算规则,用于给JSTL标签的属性赋值,也可以直接用来输出而脱离标签单独使用.

jsp中如何去除JSTL标签库“include, taglib”等留下的空白行

在做项目的时候,经常会使用到JSTL和EL表达式,有时我们需要看下页面生成的源代码,但是当jsp中充满了jstl的各种标签,页面就会存在很多的空白部分,有时太多了会让浏览器假死掉,这是我们就想要去掉这些空白的部分了.去掉的方法很多,下面一一列举出来. 我的开发及服务器环境:Windows7 + Eclipse2014 + Tomcat7.0 + JDK 1.7.0 经过多番测试,可用的方法有: 1.在每个JSP的头上加上一段代码   <%@ page trimDirectiveWhitespac

额,又来了,再求一个清除所有标签所有属性的的JS 正则表达式^^

问题描述 额,又来了,再求一个清除所有标签所有属性的的JS 正则表达式^^比如<p style="border:1px;">呵呵</p> <span id="row">第一行</span>等,清除完后只要<p>呵呵</p> <span>第一行</span> 这样就可以了, 解决方案 应该满足你的要求了.<!DOCTYPE html PUBLIC "-//W

想问下el表达式,jstl标签和struts标签可不可以混用

问题描述 嗯,其实我没什么开发经验,所以想问下真正开发时会不会这么做?struts的logic标签似乎和el表达式jstl有点重复,而且更难用点,html标签在某些地方却必须要用.所以写完后我发现自己写的页面上充斥这三种标签,不知道这么做对不对,不对的话应该怎么改进呢. 解决方案 可是可以,这也是一种变成风格 开玩笑的,推荐用一种...这样页面代码看起来就规范点啊..解决方案二:这个没有什么关系吧,我也经常这样干呢,但是觉得jstl标签比struts1的标签更好用