`

自定义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
分享到:
评论

相关推荐

    tag struts2的自定义标签实例

    tag struts2 自定义标签 实例 tag struts2的自定义标签实例

    struts1自定义标签

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

    Struts2 自定义下拉框标签Tag(源码)

    自定义标签主要包括三个步骤: 1、编写java类,继承TagSupport类; 2、创建tld文件,影射标签名和标签的java类; 3、jsp页面引入tld。 博文地址:http://blog.csdn.net/itmyhome1990/article/details/50718282

    自定义分页标签自定义分页标签

    自定义分页标签自定义分页标签自定义分页标签自定义分页标签 多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加

    struts2的自定义标签

    struts2的自定义标签写法,并且有一个例子代码。

    jQuery自定义添加标签

    jQuery自定义添加标签 仿新浪 仿大街网的添加自定义标签和换一换 收起展开推荐标签效果

    Struts2入门教程(全新完整版)

    6.其它常用标签的使用(代码参名为“补充”的文件夹下的tag.jsp) 45 七、国际化 47 1.action级别下的国际化 47 2.配置package的资源文件 48 3.app级别的资源文件 48 4.使用资源文件的原理 49 5.选择使用资源文件 49...

    Struts 2标签的应用

    利用Struts 2标签创建ex3.jsp页面,此页面提交给tag.action,在structs.xml中配置这个action的转发视图为result.jsp在result.jsp页面中显示ex3.jsp页面控件的值。(源代码和实验报告)

    struts2 标签

    struts2 标签 Taglib (Struts2标签库)

    struts2 tag 标签手册(2.0全部收录,详细,超值)

    网上struts2的资料很多,不过讲解struts2jsp标签的很少,特定上传一个。基于html格式的,基本是直接翻译过来的,很全很详细,您下了绝对不会后悔。另外在附struts2的中文教程一本,这个网上比较多,顺带上吧。好东西...

    JSP自定义标签:最近在项目中要用到这种技术,所以自己就写一个经典的HelloWorld实例

    tag标签相关属性:实现简单标签处理程序 标签处理程序是一个在运行时调用的Java类,它包含在 JSP文件中使用的自定义标签的实现代码.标签处理程序必须实现或扩展javax.servlet.jsp.tagext包中的类和接口.javax.servlet...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用) struts.multipart.saveDir The directory to use for storing uploaded files 设置存储上传...

    struts2入门教程

    ·Struts2国际化(i18n)您的应用程序 ·Struts2.0转换器(Converter) ·Struts 2.0中实现表单数据校验(Validation) ·拦截器(Interceptor) ·Struts 2中实现IoC ·Struts 2中实现文件上传 ·Struts 2中的...

    Struts2属性文件详解

    该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开. struts.diSPAtcher.parametersWorkaround 对于某些Java EE服务器,不支持HttpServlet Request...

    JSP自定义Table标签demo

    JSP自定义Table标签demo JSP自定义Table标签demo JSP自定义Table标签demo

    struts2 tag 使用实例

    struts2 tag 使用实例.包含所有的tags

    自定义多选下拉框标签

    自定义多选下拉框标签,只需引用标签即可实现多选下拉框,可以传入参数来改变样式等

    jsp标签大全

    · 什么是自定义tag标签?  · 怎么使用tag标签?  o 声明要使用的tag库  o 找到与之对应的tag处理类  o tag标签的类型  · 自定义tag标签  o tag处理类  o tag库描述  o tag标签示例  o 带属性的tag  o ...

    Struts2 自定义下拉框Tag标签

    主要介绍了Struts2 自定义下拉框Tag标签的相关资料,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics