创建权限标签(类似<s:if>标签),如<p:permit module="Sysuser" operate="add"><input type="button" value="test"/></p:permit>
1.创建tld文件(可参照struts-tags.tld),将其存在classpath下:
<display-name>"Custom Tag"</display-name>
<tlib-version>1.0</tlib-version>
<short-name>p</short-name>
<uri>/mylib-tags</uri>
<tag>
<description><![CDATA[Permit tag]]></description>
<name>permit</name>
<tag-class>com.kevin.tag.PermissionTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<description><![CDATA[Expression to determine if user have permission to display this content]]></description>
<name>module</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description><![CDATA[Expression to determine if user have permission to display this content]]></description>
<name>operate</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<dynamic-attributes>false</dynamic-attributes>
</tag>
2.创建permissionTag:
public class PermissionTag extends ComponentTagSupport {
private static final long serialVersionUID = 1L;
String module;
String operate;
@Override
public Component getBean(ValueStack stack, HttpServletRequest req,
HttpServletResponse res) {
return new PermissionComponent(stack, req);
}
protected void populateParams() {
((PermissionComponent) getComponent()).setModule(module);
((PermissionComponent) getComponent()).setOperate(operate);
}
public void setModule(String module) {
this.module = module;
}
public void setOperate(String operate) {
this.operate = operate;
}
}
3.创建PermissionComponent:
@StrutsTag(name = "permit", tldTagClass = "com.kevin.tag.PermissionTag", description = "Permit tag")
public class PermissionComponent extends Component {
public static final String ANSWER = "com.kevin.tag.permissiontag.answer";
Boolean answer = Boolean.FALSE;
String module;
String operate = "";
HttpServletRequest req;
@StrutsTagAttribute(description = "Expression to determine permit body of tag is to be displayed", type = "String", required = true)
public void setModule(String module) {
this.module = module;
}
@StrutsTagAttribute(description = "Expression to determine permit body of tag is to be displayed", type = "String", required = false)
public void setOperate(String operate) {
this.operate = operate;
}
public PermissionComponent(ValueStack stack, HttpServletRequest req) {
super(stack);
this.req = req;
}
public boolean start(Writer writer) {
if (module != null) {
Sysuser sysuser = (Sysuser) req.getSession().getAttribute("user");
Map<String, String> permissionMap = sysuser.getPermissionMap();
String sessionOperate = permissionMap.get(module);
if (sessionOperate != null) {
if (operate == null) {
answer = Boolean.TRUE;
} else {
operate = convertOperate(operate);
if (sessionOperate.contains(operate))
answer = Boolean.TRUE;
}
}
}
stack.getContext().put(ANSWER, answer);
return answer.booleanValue();
}
public boolean end(Writer writer, String body) {
stack.getContext().put(ANSWER, answer);
return super.end(writer, body);
}
private String convertOperate(String operate) {
StringBuffer result = new StringBuffer(",");
Operation[] operates = Operation.values();
for (Operation o : operates) {
if (o.name().equals(operate)) {
result.append(o.getValue());
break;
}
}
result.append(",");
return result.toString();
}
public static void main(String[] args) {
String test = "kevin";
System.out.println(test.contains(null));
}
}
分享到:
相关推荐
在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...
自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...
在Struts2中,自定义标签的实现是提升可重用性和简化视图层代码的一个重要特性。下面我们将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理。 自定义标签的创建主要涉及以下三个步骤: 1. **创建taglib...
在Struts2中,自定义标签是开发者扩展框架功能和简化视图层编码的重要手段。自定义标签允许将复杂的逻辑封装到可重用的组件中,提高代码的可读性和可维护性。 在Struts2中创建自定义标签,通常涉及以下几个步骤: ...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...
自定义标签是Struts2的一个重要特性,允许开发者扩展框架的功能,提供更友好的界面元素。在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与...
本篇文章将深入探讨如何在Struts 2中实现自定义标签进行分页,包括简单的上下分页和数字分页。 首先,我们需要理解分页的基本概念。分页是指将大量数据分成若干小部分,每次只显示一部分,通过翻页来查看其他部分。...
在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...
在Struts2框架中,自定义标签是扩展和优化应用功能的重要手段,它允许开发者创建符合业务逻辑且可重用的视图组件。本实例将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理和步骤。 首先,自定义标签在...
STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS...
### Struts2自定义标签详解 #### 一、引言 在Web开发中,Struts2框架因其灵活性和强大的功能而被广泛采用。其中,自定义标签是提高代码复用性和增强页面展示效果的重要手段。本文将深入探讨如何在Struts2中创建...
在Struts2中,自定义标签可以用来扩展JSP页面的功能,使其能够更好地与后台业务逻辑交互。 自定义标签的实现通常分为以下几个步骤: 1. **创建标签库**:定义一个XML文件(如struts-tags.xml),用于声明自定义...
自定义标签,直接代码,直接模仿开发即可 public class ButtonTag extends AttributeTag { //tld中定义的属性 public String label; public String url; public String click; public String confirm; public ...
自定义标签是Struts2的一个强大特性,允许我们扩展框架的功能,以满足特定项目的需求。在这个例子中,我们将深入理解如何在Struts2中创建一个自定义的`gageTextField`标签。 1. **创建UIBean(UI组件)** UIBean,...
本示例"struts2自定义结果类型demo"旨在演示如何在Struts2中创建并使用自定义结果类型。首先,我们需要了解Struts2的结果类型工作原理: 1. **默认结果类型**: - Struts2提供了一些内置的结果类型,如`dispatcher...