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

◇◆丶佛笑我妖孽 提交于 2020-10-08 03:13:00

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

这一点无论是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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!