修改标签所对应的源码

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

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

修改<s:a>标签所对应的源码_第1张图片

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

修改<s:a>标签所对应的源码_第2张图片

修改<s:a>标签所对应的源码_第3张图片

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

修改<s:a>标签所对应的源码_第4张图片

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

修改<s:a>标签所对应的源码_第5张图片

找到源码

修改<s:a>标签所对应的源码_第6张图片

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

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

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

修改<s:a>标签所对应的源码_第7张图片

@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(); // 输出<a>标签,并继续执行此标签后面的JSP代码
		} else {
			return BodyTagSupport.EVAL_PAGE; // 没有输出<a>标签,继续执行此标签后面的JSP代码
		}
	}




你可能感兴趣的:(修改标签所对应的源码)