博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
修改<s:a>标签所对应的源码
阅读量:2396 次
发布时间:2019-05-10

本文共 857 字,大约阅读时间需要 2 分钟。

让页面调用的这个标签不是struts2的,而是自己抄系统的。同包同名的标签。

直接点击会进入对应的tld文件。

或者从jar包里面找tld文件的方式。

找到tld文件没用,关键是要改对应的java源码。

ctrl+shift+t找到对应的源码。

找到源码

新建一个和源码一样的包名和类名

这样子classpath下面就会有完全相同的两个类,最后系统调用哪个类就要看谁先被加载,因为class字节码只加载一次,所以谁先加载后就固定不变了。所以先找到谁就用谁。而classpath下面是优先加载代码,找不到了才去lib下找jar包看看有没有要的类,也就是说新建一个一样的类之后,系统就会自动用自己新建的这个。

类源码找不doEndTag这个类,那么就在父类,我新建的类要重写doEndTag来实现自己要的功能。

@Override	public int doEndTag() throws JspException {		// 获取当前登录的用户		User user = (User) pageContext.getSession().getAttribute("user");		if (user == null) {			throw new RuntimeException("没有登录用户!");		}		// 获取所需要的权限URL(在action属性值中,但需要处理一下)		String privUrl = "/" + action;		// 根据权限决定是否显示超链接		if (user.hasPrivilegeByUrl(privUrl)) {			return super.doEndTag(); // 输出标签,并继续执行此标签后面的JSP代码		} else {			return BodyTagSupport.EVAL_PAGE; // 没有输出标签,继续执行此标签后面的JSP代码		}	}

转载于:https://my.oschina.net/u/2356176/blog/466115

你可能感兴趣的文章
ES6--Map(Map与Object区别、Map的迭代、Map与Array转换、Map的克隆及合并)
查看>>
ES6--Set(特殊值、类型转换、Set对象的作用)
查看>>
ES6--对象
查看>>
ES6--字符串(拓展的方法、模板字符串)
查看>>
ES6--数组(数组创建、填充、遍历、包含、数组缓冲区、定型数组、扩展运算符)
查看>>
ES--函数(默认参数、箭头函数)
查看>>
ES6--Class类
查看>>
ES6--模块
查看>>
ES6--迭代器(Iterator、迭代过程、可迭代数据类型、可迭代数据结构、定义可迭代对象)
查看>>
ES6--Promise对象
查看>>
ES6--Generator函数
查看>>
ES6--async函数
查看>>
Vue.js--数字输入框组件
查看>>
Vue.js--标签页组件
查看>>
Vue.js--下拉菜单组件
查看>>
Vue.js--自定义指令(时间转换)
查看>>
ES6--Proxy
查看>>
ES6--Reflect
查看>>
web--使用fileupload进行文件上传
查看>>
Struts2--Action访问ServletAPI的两种方式(ActionContext、ServletActionContext)
查看>>