Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

 

Java Spring Boot VS .NetCore (一)来一个简单的 Hello Worldhtml

Java Spring Boot VS .NetCore (二)实现一个过滤器Filter前端

Java Spring Boot VS .NetCore (三)Ioc容器处理java

Java Spring Boot VS .NetCore (四)数据库操做 Spring Data JPA vs EFCore数据库

Java Spring Boot VS .NetCore (五)MyBatis vs EFCoreide

Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtmlspa

Java Spring Boot VS .NetCore (七) 配置文件code

Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attributehtm

Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Securityblog

Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor继承

Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

这章介绍下 自定义标签,都知道在处理权限操做的时候,除了后台代码中处理,对于界面上没有权限的人员对于的权限按钮也不会显示

这一点不管是Java 仍是.NetCore 也是有不少共同点

 

Java Freemarker 处理

首先来配置下Freemarker的代码,来设置按钮的显示 隐藏

@Configuration
public class FreeMarkerConfig {

    @Autowired
    private freemarker.template.Configuration configuration;

    @PostConstruct
    public void setSharedVariable() {
        try {
            configuration.setSharedVariable("freemark", new MyTags());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下面看下MyTags是什么?

public class MyTags extends SimpleHash {
    public MyTags() {

        put("hasRole", new RoleTag());
  
    }
}

自定义的Tag标签须要继承  SecureTag 这个基类,而后在渲染方法 render处理下就ok 

public abstract void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException;

对渲染方法重写实现,实现里面能够根据业务处理了,这里须要,下面结合Shiro来处理下

public abstract class RoleTag extends SecureTag {
    String getName(Map params) {
        return getParam(params, "name");
    }

    @Override
    public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException {
        boolean show = showTagBody(getName(params));
        if (show) {
            renderBody(env, body);
        }
    }

    protected abstract boolean showTagBody(String roleName);
}

下面看看模版中怎么来使用 这里以某人具备某个功能点的权限

<@freemark.hasPermission name="system:role:add"> <button class="btn btn-success " type="button" onclick="add();"><i class="fa fa-plus"></i>&nbsp;添加</button> </@freemark.hasPermission>

其实就这个流程,那么.NetCore中怎么来自定义标签呢?

.NetCore 自定义标签

.NetCore  主要经过继承TagHelper 类来实现自定标签,可是须要以TagHelper标志性结尾,这里跟java相似

public class UosoPagerTagHelper : TagHelper
    {       
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {

        }
    }

淡然这里能够注入(DI)上先关的服务 处理权限,这里能够没必要像java在前端判断显示按钮,这里能够直接根据业务按须要处理渲染的必要性

那么在前端界面上咱们怎么处理呢? 

首先须要添加控件引用,能够经过 ViewImports 页面中添加

@addTagHelper ExpressUser.Extensions.UosoPagerTagHelper, ExpressUser

而后就能够直接在界面上敲出来相关自定义的控件了,也是很是简单的~

 <uoso-pager></uoso-pager>
相关文章
相关标签/搜索