`

自定义Tag标签的使用、Struts2国际化全局资源配置(老鸟请绕道)

阅读更多

      今天同事问我,如何对jsp上用户的某个功能进行限制,具有相应的权限,则能执行相应的功能,否则不可见或者不能执行!  我当时告诉他可以建个类,这个类继承BodyTagSupport类。然后重写它的 doStartTag()方法!前提是还要在WEB-INF目录下建立tag文件夹,再tag文件夹下建立 .tld文件,然后再加以配置就可以实现限制权限的功能!晚上回到家闲着没事就把写了个源代码实例!欢迎大家拍砖!


      首先,我们先建立 TagPrivilege 类

package cn.zg.tools;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class TagPrivilege extends BodyTagSupport {

	private String privilegeContent;//权限的内容
	private String trueMsg;// 有权限应输出的内容
	private String falseMsg;//无权限应输出的内容
	public String getPrivilegeContent() {
		return privilegeContent;
	}
	public void setPrivilegeContent(String privilegeContent) {
		this.privilegeContent = privilegeContent;
	}
	public String getTrueMsg() {
		return trueMsg;
	}
	public void setTrueMsg(String trueMsg) {
		this.trueMsg = trueMsg;
	}
	public String getFalseMsg() {
		return falseMsg;
	}
	public void setFalseMsg(String falseMsg) {
		this.falseMsg = falseMsg;
	}
	@Override
	public int doStartTag() throws JspException{
		String text = (String) pageContext.getSession().getAttribute("privilege");
		try {
			if(privilegeContent.equals(text)){
				this.pageContext.getOut().write(trueMsg);
				
			}else{
				this.pageContext.getOut().write(falseMsg);
			}
			return EVAL_BODY_INCLUDE;
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		return EVAL_BODY_INCLUDE;
	}
	
	
	
	
}


然后我们还要配置.tld文件: 注意把TagPrivilege类中用到的属性写在tld文件中!如下:

<?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.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>privilege</shortname>
	<uri>http://cn.zg.tools/privilege</uri>
	<tag>
		<name>privilege</name>
		<tagclass>cn.zg.tools.TagPrivilege</tagclass>
		<attribute>
			<name>privilegeContent</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>trueMsg</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>falseMsg</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		
	</tag>
</taglib>

 如果是新手的话,可能对这个tld文件的xml代码中的标签有些陌生,别急,我来告诉大家。 name 标签对应的是标签类TagPrivilege的属性名, required 则表示是否为必填, rtexprvalue 表示在是否可以在里面写入EL表达式。


做完这一步,就算是大功告成了! ,那么如何进行使用呢? 请看下面的jsp代码!

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib  prefix="p" uri="http://cn.zg.tools/privilege"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


<html>
  <head>
    
    <title>权限测试</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
  </head>
  <%
  		request.getSession().setAttribute("privilege","show");
   %>
  <body>
     	<p:privilege privilegeContent="close" trueMsg="欢迎访问,您已经获得权限!" falseMsg="您无权限
访问!"/>
  </body>
</html>

 不知大家可否注意:jsp页面上tablib引用的uri为: http://cn.zg.tools/privilege 。它和.tld文件中定义的uri标签是一致的!


现在大家猜想一下 页面的输出结果是什么,

首先假设用户已经登陆,我在session设置他对某个按钮的功能为可见,暂定为

request.getSession().setAttribute("privilege","show");

然后当我们在页面中使用

<p:privilege privilegeContent="close" trueMsg="欢迎访问,您已经获得权限!" falseMsg="您无权限
访问!"/>

这个标签的时候,就会自动的执行TagPrivilege类中的doStartTag()方法,方法中通过pageContext.getSession().getAttribute("privilege"); 得到用户的权限,

然后根据用户在标签上提供的

privilegeContent="close"

来进行比较,如果相等,则用户具有此权限,否则没有,由此可以进行扩展的是,用户登陆后我们获取用户的权限的集合,然后保存在session中,那么对应的某一个按钮,是否可以执行一个权限,那么就看这个session中的权限集合是否包含该按钮的权限,假如包含则:反馈trueMsg内容,否则反馈falseMsg内容!


我们可以把trueMsg 和 falseMsg 的内容写成true 或者false,当为fasle就把按钮设置为隐藏或者不可点击,为true则显示按钮或可点击! 这样就实现了用户对某个按钮上的权限的使用!


因为"close" != "show"  ,所以页面会输出falseMsg的内容,即“您无权限访问!”,假如把

privilegeContent的值改为 "show",那么和session的键为“privilege”的值是一致的,那么输出“欢迎访问,您已经获得权限!”

 

为了新手学习,我提供了源码(里面还有我写的struts2的“国际化全局资源配置”源码,因为我写tag自定义标签是在前面这个项目上临时加的功能! 直接访问项目的index.jsp页面就可以看到国际化和tag自定义标签这两种技术的效果)放在附件里,欢迎下载!      老鸟请绕道!  呵呵!

 

  • 大小: 27.8 KB
  • 大小: 12.7 KB
1
1
分享到:
评论

相关推荐

    struts2 自定义标签

    在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

    tag struts2的自定义标签实例

    总结,Struts2的自定义标签实例涉及到以下几个关键步骤:创建标签实现类、定义标签描述符、在JSP中使用标签以及处理标签逻辑。通过这种方式,我们可以构建强大的视图层组件,使代码更易于理解和维护,同时提升应用的...

    Struts2自定义标签

    3. **配置Struts2**:在Struts2的配置文件struts.xml中,你需要声明你的自定义标签库,这样框架才能识别并使用它们。 4. **在JSP页面中使用**:最后,你可以在JSP页面中引入标签库,并像使用内置标签一样使用自定义...

    struts实现自定义标签

    在 Struts 中,我们可以通过实现 `org.apache.struts.taglib.Tag` 接口来创建自定义标签。 二、创建自定义标签库 1. 创建 Tag 类:首先,我们需要创建一个 Java 类,该类继承自 `org.apache.struts.taglib.Tag` 或...

    struts2自定义标签案例详解

    在Struts2中,自定义标签的实现是提升可重用性和简化视图层代码的一个重要特性。下面我们将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理。 自定义标签的创建主要涉及以下三个步骤: 1. **创建taglib...

    自定义标签代替Struts标签实现分页

    然而,有时候我们可能需要根据项目需求定制特定的功能,比如这里的"自定义标签代替Struts标签实现分页"。下面将详细阐述这个主题。 一、自定义标签的原理 自定义标签是JavaServer Pages (JSP) 技术的一个强大特性,...

    Struts2 自定义标签

    在Struts2的配置文件(通常是`struts.xml`)中,添加标签库的配置,让框架知道如何找到并使用这些自定义标签。 ```xml &lt;struts&gt; &lt;!-- 其他配置 --&gt; &lt;constant name="struts.custom.i18n.resources" value=...

    自定义标签+struts2标签控制访问链接权限.zip

    在IT领域,自定义标签是Java Web开发中的一个重要概念,特别是在使用JSP和Struts2框架时。自定义标签能够帮助我们创建可重用、可维护的代码,提高开发效率,使得视图层的逻辑更加清晰。本教程资料集主要探讨了如何...

    自定义struts2标签

    Struts2的标签库基于Apache的Commons Taglib项目,它提供了一系列内置的标签,如`s:text`、`s:property`等,用于处理表单、国际化和数据绑定等任务。自定义标签则允许我们扩展这些功能,以满足特定的业务需求。 ...

    struts2的自定义标签例子

    下面将详细探讨如何在Struts2中创建和使用自定义标签。 首先,自定义标签是JSP标准标签库(JSTL)的扩展,允许我们定义自己的标签来简化页面编码。在Struts2中,自定义标签通常通过Action类和结果视图来与后台业务...

    自定义JSP标签实现语言国际化(类似struts text标签),并同时支持图片、JS文件国际化

    本文将探讨如何自定义JSP标签来实现类似于Struts Text标签的功能,并扩展到支持图片和JS文件的国际化。 首先,我们需要创建一个自定义的JSP标签库。这通常涉及到两个主要部分:标签处理类(Tag Handler Class)和...

    struts2自定义标签

    最后,在JSP页面中,我们可以像使用其他Struts2标签一样使用自定义的分页标签,通过属性传递参数。 ```jsp &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; ${currentPage}" total="${totalPages}" url="list....

    struts2的自定义标签

    2. **创建标签处理类(Tag Handler Class)**:标签处理类是实现自定义标签逻辑的核心,它需要继承自Struts2提供的基类,如`org.apache.struts2.views.jsp.ui.TagSupport`。在该类中,我们需要重写父类的方法来处理...

    struts1自定义标签

    自定义标签,直接代码,直接模仿开发即可 public class ButtonTag extends AttributeTag { //tld中定义的属性 public String label; public String url; public String click; public String confirm; public ...

Global site tag (gtag.js) - Google Analytics