让页面调用的这个标签不是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(); // 输出<a>标签,并继续执行此标签后面的JSP代码 } else { return BodyTagSupport.EVAL_PAGE; // 没有输出<a>标签,继续执行此标签后面的JSP代码 } }
时间: 2024-10-08 00:25:00