您也可以创建自定义标签来完成此操作。这是一个简单的例子:
创建一个新的 tld 文件:
WEB-INF/user.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag
Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name></short-name>
<tag>
<name>user</name>
<tag-class>tags.UserRoleTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>roles</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
创建自定义标签类:
标签/UserRoleTag.java
package tags;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
@SuppressWarnings("serial")
public class UserRoleTag extends TagSupport {
private String roles;
public int doStartTag() throws JspException {
String userRole = (String)pageContext.getAttribute("currentUserRole");
return roles.contains(userRole) ? EVAL_BODY_AGAIN : SKIP_BODY;
}
public String getRoles() {
return roles;
}
public void setRoles(String roles) {
this.roles = roles;
}
}
创建你的 jsp:warfolder/home.jsp
<%@ taglib uri="/WEB-INF/user.tld" prefix="u" %>
<% pageContext.setAttribute("currentUserRole", "admin"); // this value would come from the controller... %>
<u:user roles="admin registered">
welcome admin!
</u:user>
<u:user roles="guest">
welcome guest!
</u:user>
采用这种方法可以使您的模型和标签保持松散耦合,并且很可能可以在其他项目中重复使用。