❶ 关于jsP中自定义标签的属性传值问题
楼主在页面上是否定义homework标签,如
<%@ taglib uri="/WEB-INF/homeworkTag.tld" prefix="homework"%>
同时,在WEB-INF/目录下,要有homeworkTag.tld文件,文件中要有homework 的tag定义。
❷ jsp自定义标签
我觉得上楼回答的不完全对,自定义标签,不一定就是tomcat给封装好了的,自己也可以实现接口,编写*.tld(标签库描述文件),然后标签创建成功,便可引入页面使用了。下面截一段API与大家讨论:
javax.servlet.jsp.tagext
Interface JspTag
All Known Subinterfaces:
BodyTag, IterationTag, LoopTag, SimpleTag, Tag
从上一段API内容中可以看出JspTag接口下又有BodyTag, IterationTag, LoopTag, SimpleTag, Tag几个子接口。
然后以SimpleTag接口为例,分享set_等方法之用意:
Method Summary(方法概要)
void doTag()
Called by the container to invoke this tag.
当容器调用该方法时,唤醒该标签
JspTag getParent()
Returns the parent of this tag, for collaboration purposes.
返回该标签的父标签
void setJspBody(JspFragment jspBody)
Provides the body of this tag as a JspFragment object, able to be invoked zero or more times by the tag handler.
把JspFragment对象作为body提供给这个标签,能够被tag管理器调用0或多次。
void setJspContext(JspContext pc)
Called by the container to provide this tag handler with the JspContext for this invocation.
设置上下文
void setParent(JspTag parent)
Sets the parent of this tag, for collaboration purposes.
设置该标签的父标签
最后,一系列set方法,我觉得可以说成是对标签属性的设置
❸ jsp怎么调用tag
这个就要看你想调用那个tag了,比如jstl的话,首先在jsp代码的开头加上
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>,后面点哟高的时候这样子用,比如:
<body background="/RFMS/images/banner.jpg">
<center><form id="form1" name="form1" method="post" action="">
<p></p>
<p><strong>管理员信息如下</strong> </p>
<table width="76%" border="1" cellspacing="0">
<tr>
<td><div align="center">账号</div></td>
<td><div align="center">密码</div></td>
<td><div align="center">类型</div></td>
<td><div align="center">删除</div></td>
</tr>
<c:forEach var="mi" items="${al}">
<tr>
<td>${mi.accNum }</td>
<td>${mi.pasWord }</td>
<td>${mi.type}</td>
<td><a href="Delete.action?zh=${mi.accNum }">删除</a></td>
</tr>
</c:forEach>
</table>
</form>
</center>
</body>
</html>
❹ 如何创建使用jsp自定义标签
一.编写java类继承TagSupport或TagSupport
1) 提供属性的set方法,
此后这个属性就可以在jsp页面设置。以jstl标签为例
<c:out
value=""/>,这个value就是数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。例如setValue(String
data){this.data = data;}
这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。
2)处理 doStartTag 或 doEndTag
这两个方法是
TagSupport提供的。 还是以<c:out value=""/>为例,当jsp解析这个标签的时候,在“<”处触发 doStartTag
事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。
下面是一个简单的例子
Java代码
package com.test.tag;
import java.io.IOException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* PermissionBodyTag 根据是否有权限显示body内容
*/
public
class PermissionBodyTag
extends BodyTagSupport {
boolean permission;
public boolean isPermission() {
return permission;
}
public void setPermission(boolean permission) {
this.permission = permission;
}
public int doStartTag()
throws JspTagException {
if (permission) {
return EVAL_BODY_INCLUDE;
}
else {
return SKIP_BODY;
}
}
public int doEndTag()
throws JspTagException {
System.out.println("doEndTag");
try {
if (bodyContent !=
null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}else{
}
}
catch (IOException e) {
throw new JspTagException("IO ERROR:" + e.getMessage());
}
return EVAL_PAGE;
}
public void doInitBody()
throws JspTagException {
}
public void setBodyContent(BodyContent bodyContent) {
this.bodyContent = bodyContent;
}
}
通常你会发现自己绝大多数活动都集中在 doStartTag 或 doEndTag 方法里。确实如此,熟悉一些接口和类之后,写taglib很容易。正如《jsp设计》的作者所言:里面的逻辑稍微有点复杂,但毕竟没有火箭上天那么难。
二.编写tld文件
标签文件其实只是一个XML格式的说明文件,内容也很简单。
创建tagTest-html.tld文件在这个标签文件中,我们将我们创建的标签取名 tagTest,并声明了类型和参数(permission)。将该文件保存在 /WEB-INF 下面。
Java代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>tagTest</shortname>
<uri>/taiji</uri>
<tag>
<name>permission</name>
<tagclass>com.test.tag.PermissionBodyTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>permission</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
三.加到web.xml中
当然,我们还需要将我们自定义的标签添加到 web.xml 中,否则还是无法使用。
Java代码
<taglib>
<taglib-uri>/tagTest </taglib-uri>
<taglib-location>/WEB-INF/tagTest-html.tld</taglib-location>
</taglib>
四.在jsp页面导入tld
Java代码
<%@ taglib uri="/tagTest " prefix="tagTest "%>
这样,你的jsp页面就可以使用自己的tag了。用这个标签就可以根据传人的boolean值来决定标签包的jsp内容是否输出
Java代码
<tagTest:permission permission="<% java code%>">
//需有权限输出,用户才能看到的内容
</tagTest:permission>
❺ jsp 自定义标签 提示
这个很简单的啊,在标签符描述文件(.tld),tag标签(也就是你自定义的标签)
节点
<attribute>
<name>style</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
这样写,然后在jsp页面顶部
<%@ taglib uri="" prefix="" %>引入文件
按alt+?就有提示,搞定了
❻ jsp中tag标记怎样建立
JSP标签有两种实现方法,一种是使用tag 文件,一种是使用tld文件。
1、使用tag文件
标签名和tag文件名一致, tag文件为JSP文件,可以有属性,把JSP页面当JavaBean文件一样使用。
例子:
1)WEB-INF/lib下放置TAG文件:MyTag.tag,那么就有了一个名为MyTag的标签:
<%@tagpageEncoding="UTF-8"%>
<%@attributename="id"required="true"rtexprvalue="true"%>
<%@attributename="webletID"required="true"rtexprvalue="true"%>
<B>JSPTAGATTRIBUTEGET<B>
<divid="<%=getId()%>"style="border:solid1px#ff0000">
Here,:<%=getWebletID()%>
<br>:<%=webletID%>
</div>
<script>
</script>
<br>
可定义属性attribute,有变量名(name),是否必需(required)等属性,相当于定义一个JavaBean的属性。在使用属性的值时,可通过get方法来访问或通过变量名的方式来访问。
2)创建引用标签的JSP文件test.jsp,放置于Web目录下,如何WEB-INF同级目录
[html]viewplain
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglibprefix="mx"tagdir="/WEB-INF/tags"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK"/>
<title>Tagtest</title>
</head>
<body>
<h1>TagTestisok!</h1>
<mx:MyTagid="Weblet1"webletID="W1001"/>
</body>
</html>
在定义好属性后,就可在TAG被引用时,接受传入参数。标签TAG的属性id,webletID。
3)访问test.jsp,效果如下:
JSP TAG ATTRIBUTE GET
Here, got the attribute value by get method:W1001
Got the attribute value by variable:W1001
2、使用tld文件
tld为XML格式文件,在其中描述标签组件的类和属性等。
方法1的使用比较直接简单,修改标签直接修改JSP文件即可;方法2使用定义方式来描述标签,修改标签需要修改tld描述文件和对应的class文件。
JSP中的TAG文件和TLD文件小结
在jsp文件中,可以引用tag和tld文件。
1.对于tag文件
<%@ taglib prefix="ui" tagdir="/WEB-INF/tags" %>
其中的tags是个目录,里面有若干tag文件。
但使用<ti:XXXX>时,目录WEB-INF/tags下,必然有个XXXX.tag文件与之对应。
2.对于tld文件
在jsp中可以引用TLD文件,如
<%@ taglib uri="http://struts.apache.org/tags-html"prefix="html"%>
但是这个http://struts.apache.org/tags-html对应着什么呢?
jsp会在当前目录的WEB-INF下找所有tld文件,确认这个URL对应哪个TLD文件。
当找到struts-html.tld文件时,发现其中的内与这个URL对应。
但使用<html:YYYYY>时,这个TLD文件中必然有个YYYY项与之对应。
还有一种更保险的方法是,在WEB-INF/web.xml中加上
<taglib>
<taglib-uri>
http://jakarta.apache.org/tomcat/examples-taglib
</taglib-uri>
<taglib-location>
/WEB-INF/jsp/example-taglib.tld
</taglib-location>
</taglib>
这样表示http://jakarta.apache.org/tomcat/examples-taglib对应着/WEB-INF/jsp/example-taglib.tld
tag文件作用一般是一段小代码,类似include文件的作用。
tld文件作用比较复杂,可以实现很多高级的作用。
❼ 请问下JSP中的标签库描述文件tld要放在什么位置
JSP中的TLD描述文件 按照位置来分 可以放在四个位置:
1.应用的/WEB-INF/下
2.应用的/WEB-INF/的一个子目录下
3.应用的/WEB-INF/lib/jar下
4.应用的/WEB-INF/lib/jar的一个子目录下
希望对楼主有帮助。。。
❽ 如何在JavaWeb程序中使用tld文件
这是来自定义JSP标签的配置文件源,在JavaWeb程序中使用的方法有2种:
1)在web.xml中统一配置
<taglib>
<taglib-location>标签配置文件的物理地址</taglib-location>
<taglib-uri>标签配置文件的调用别名</taglib-uri>
</taglib>
2)JSP中引入标签库
<%@ taglib uri="标签配置文件的物理地址"
prefix="调用别名"%>