❶ 關於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="調用別名"%>