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>
相關文章
相關標籤/搜索