后台配合实现按钮动态变化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Q563573095/article/details/80431905

一、需求背景
1、按钮的个数需要可扩展
2、按钮的显示需要根据具体记录状态和权限变化
这里写图片描述
这里写图片描述
二、需求分析
1、这个需求要求按钮不能简单的写在页面,这样会造成不同页面的代码冗余。
2、可以考虑按钮显示内容及相关信息由后台维护并带到前端展示,如点击后跳转的链接
3、对记录状态和权限的判断设计到查询数据库等调用代码的操作。如果简单使用控制语句判断实现则扩充意味权限&状态规则不变的情况下着要修改代码。
4、最好的方式是按钮的信息(规则判断、跳转、显示信息)维护到代码外,如xml文件等。此时“状态、权限判断的代码调用”就是字符串
5、此时就需要一个实现能够直接执行该字符串并返回结果功能,这是关键。
三、需求实现
1、这个能够直接执行就是org.eweb4j.fel
2、XML设计如下,对不同的模块,有不同的pageId

<states>
    <!--
        1、pageId是主键,用于匹配具体的state
        2、service是执行<exp>表达式依赖的服务
        3、paramSwitchExp 可以用来拼凑button的url参数
    -->
    <state pageId="logan_page_event_list" prepare="service1"
           paramSwitchExp="editPageId:eventType.edit|detailPageId:eventType.detail">
        <!--
        1、name是key值
        2、il8n显示名
        3、sort,按钮显示时的排序
        4、url,触发时的跳转连接
        5、exp中的返回true时返回该按钮
    -->
        <button name="edit" i18n="编辑" sort = "3"  url="/regular/index.html?__id=$editPageId$&amp;businessId=$eventId$">
            <exp>
                service1.checkEventStatus(eventStatus,'new')
                &amp;&amp;(service1.checkRecordBySelf(eventPerson) || service1.checkIsAgent(creator, agent, eventPerson, eventStatus,'new'))
            </exp>
        </button>
    </state>

    <state pageId="event_edit" prepare="Service2">
        <button name="save" i18n="保存" sort = "2"  url="/regular/event/addOrUpdateEvent.json">
            <exp>
                Service2.checkEventStatus(eventStatus,'new')
                &amp;&amp;(Service2.checkRecordBySelf(eventPerson)
                ||Service2.checkIsAgent(eventId,'new'))

            </exp>
        </button>
        <button name="submit" i18n="提交" sort = "3"  url="/regular/event/submitEvent.json">
            <exp>
                Service2.checkEventStatus(eventStatus,'new')
                &amp;&amp;(Service2.checkRecordBySelf(eventPerson)
                ||Service2.checkIsAgent(eventId,'new'))
            </exp>
        </button>
    </state>

3、解析将xml解析成java对象,保存在list中(可以通过反射装入)
4、类图
这里写图片描述
5、时序图
这里写图片描述
6、当然提供服务的那个类也应该有的。

猜你喜欢

转载自blog.csdn.net/Q563573095/article/details/80431905