如何将 JSP 页面包含到自定义标记中
How to include a JSP page into a custom tag
我正在创建一个自定义标记指令,我必须在其中打印来自数据库的 table 数据。
到目前为止我创建了:
JSP 页面:
<%@taglib uri="/WEB-INF/tlds/fact.tld" prefix="veritis"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1><veritis:print name="emp" /></h1>
</body>
</html>
顶级域名文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>factorial</short-name>
<tag>
<name>print</name>
<tag-class>com.veritis.jsp.FactTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
</attribute>
</tag>
</taglib>
和一个 Class
文件,该文件使用其他 Class
文件从数据库中获取数据。此 class 文件还扩展 TagSupport
以覆盖所需的 TLD 方法。
public class FactTag extends TagSupport{
String value="emp";
public String getValue() {
return value; }
public void setValue(String value) {
this.value = value;
}
public int doStartTag(){
return Tag.SKIP_BODY;
}
public int doEndTag() throws JspTagException{
String emp1=getValue();
try{
//The following line is to get the JSP Writer Object
//similar to PrintWriter in Servlet
JspWriter out=pageContext.getOut();
TableData tbd=new TableData();
List<Employee> listOfEmp=tbd.getAllEMployees();
for(Employee emp:listOfEmp)
{
System.out.println(emp);
}
}catch(Exception e){}
return Tag.SKIP_PAGE;
}
}
现在我的 List<emp>
中有数据,我想将其打印在 JSP 文件中。我可以通过使用 out 对象来打印它,但我的要求不是使用 out 对象而是通过包含其他 JSP 文件或任何其他方式打印。
注意:虽然我是从JSP中获取input(emp)
,但我暂时没有使用它。相反,我正在生成一个静态查询来获取数据。
您可以使用 JSTL c:forEach
标记遍历 Employee
的列表。如果您不想使用基于 servlet 的框架,例如 Struts2 或 Spring MVC,您可以使用原始 servlet
@WebServlet("/employees")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TableData tbd=new TableData();
List<Employee> listOfEmp=tbd.getAllEMployees();
request.setAttribute("listOfEmp", listOfEmp);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/emloyee.jsp");
rd.forward(request, response);
}
}
employee.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Page</title>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL c:forEach and c:out to loop a list and display items in a table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.listOfEmp}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
</body>
</html>
您还可以使用包含 table 的 JSP 片段页面并将其包含到主页中。
employee.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Page</title>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<c:import url="employee_table.jsp"/>
<br><br>
</body>
</html>
employee_table.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- Using JSTL c:forEach and c:out to loop a list and display items in a table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.listOfEmp}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
我正在创建一个自定义标记指令,我必须在其中打印来自数据库的 table 数据。
到目前为止我创建了:
JSP 页面:
<%@taglib uri="/WEB-INF/tlds/fact.tld" prefix="veritis"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1><veritis:print name="emp" /></h1>
</body>
</html>
顶级域名文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>factorial</short-name>
<tag>
<name>print</name>
<tag-class>com.veritis.jsp.FactTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
</attribute>
</tag>
</taglib>
和一个 Class
文件,该文件使用其他 Class
文件从数据库中获取数据。此 class 文件还扩展 TagSupport
以覆盖所需的 TLD 方法。
public class FactTag extends TagSupport{
String value="emp";
public String getValue() {
return value; }
public void setValue(String value) {
this.value = value;
}
public int doStartTag(){
return Tag.SKIP_BODY;
}
public int doEndTag() throws JspTagException{
String emp1=getValue();
try{
//The following line is to get the JSP Writer Object
//similar to PrintWriter in Servlet
JspWriter out=pageContext.getOut();
TableData tbd=new TableData();
List<Employee> listOfEmp=tbd.getAllEMployees();
for(Employee emp:listOfEmp)
{
System.out.println(emp);
}
}catch(Exception e){}
return Tag.SKIP_PAGE;
}
}
现在我的 List<emp>
中有数据,我想将其打印在 JSP 文件中。我可以通过使用 out 对象来打印它,但我的要求不是使用 out 对象而是通过包含其他 JSP 文件或任何其他方式打印。
注意:虽然我是从JSP中获取input(emp)
,但我暂时没有使用它。相反,我正在生成一个静态查询来获取数据。
您可以使用 JSTL c:forEach
标记遍历 Employee
的列表。如果您不想使用基于 servlet 的框架,例如 Struts2 或 Spring MVC,您可以使用原始 servlet
@WebServlet("/employees")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TableData tbd=new TableData();
List<Employee> listOfEmp=tbd.getAllEMployees();
request.setAttribute("listOfEmp", listOfEmp);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/emloyee.jsp");
rd.forward(request, response);
}
}
employee.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Page</title>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL c:forEach and c:out to loop a list and display items in a table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.listOfEmp}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
</body>
</html>
您还可以使用包含 table 的 JSP 片段页面并将其包含到主页中。
employee.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Page</title>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<c:import url="employee_table.jsp"/>
<br><br>
</body>
</html>
employee_table.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- Using JSTL c:forEach and c:out to loop a list and display items in a table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.listOfEmp}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>