跳至主要內容

服务器动作ServerAction

Mr.Hope大约 4 分钟

服务器动作ServerAction

一、动作注解属性

@Action

@Action(displayName = "",
        label = "",
        summary = "",
        contextType = ActionContextTypeEnum.SINGLE,
        mapping = {},
        context = {},
        attributes = {},
        bindingType = ViewTypeEnum.TABLE)

这段代码定义了一个名为 Action 的注解,它具有以下属性:

  • displayName: 用于指定动作的展示名称。
  • label: 用于指定动作的显示文字。
  • summary: 用于提供动作的描述信息。
  • contextType: 用于指定动作的上下文类型,默认为单个对象的上下文。
  • mapping: 数据传输映射DSL,用于定义数据传输时的映射关系。
  • context: 上下文,用于指定动作的上下文属性。
  • attributes: 扩展属性,用于定义动作的额外属性。
  • bindingType: 表示动作绑定在源模型的哪些视图上,默认为 TABLE 视图。

作用范围:方法(Method)

常用配合contextType设置动作上下文类型:

  • SINGLE (默认): 用于单行,通常出现在列表页的每行末尾的操作栏中,或表单页的页面上方。
  • BATCH: 用于多行,常出现在列表页的表格上方按钮区。
  • SINGLE_AND_BATCH: 用于单行或多行,通常出现在列表页的表格上方按钮区。
  • CONTEXT_FREE: 上下文无关,常出现在列表页的表格上方按钮区。

bindingType设置按钮所在页面类型:

  • TABLE: 列表页
  • GALLERY: 画廊
  • FORM: 表单页
  • DETAIL: 详情页
  • CUSTOM: 自定义页

@Action.Advanced

@Action.Advanced(name = "",
                 args = {}, 
                 type = FunctionTypeEnum.UPDATE,
                 language = FunctionLanguageEnum.JAVA,
                 managed = false, 
                 invisible = "",
                 rule = "", 
                 disable = "", 
                 check = false, 
                 bindingView = "", 
                 priority=100
)

这段代码定义了一个名为 Advanced 的注解,它具有以下属性:

  • name: 技术名称,默认为空,[Java方法名]。
  • args: 参数名列表,默认为空数组。
  • type: 动作函数类型,默认为 FunctionTypeEnum.UPDATE。
  • language: 动作函数语言,默认为 FunctionLanguageEnum.JAVA。
  • managed: 是否是数据库管理器函数,默认为 false。
  • invisible: 显隐表达式,默认为空。
  • rule: 服务端过滤表达式,默认为空。
  • disable: 禁用表达式,默认为空。
  • check: 校验,默认为 false。
  • bindingView: 绑定视图名称,默认为空,表示动作不限于特定视图。
  • priority: 展示顺序 ,默认为 100。

作用范围:方法(Method)

@Validation

@Validation(check = {},checkWithTips = {},rule = {},ruleWithTips = {})

以下是每个属性的说明:

  • check: 模型约束的校验函数,以校验函数的编码列表形式表示。
  • checkWithTips: 模型约束的校验函数,以函数编码及提示列表的形式表示。
  • rule: 模型约束的校验表达式,以校验表达式的列表形式表示。
  • ruleWithTips: 模型约束的校验表达式,以表达式及提示列表的形式表示。

@Validation.Rule

@Validation.Rule(value = "",
                  tips = "",
                  error = "",
                  errorType = ErrorTypeEnum.BIZ_ERROR,
                  level = InformationLevelEnum.ERROR,
                  remark = "",
                  scope = FunctionScopeEnum.BOTH
)

这个注解用于定义校验表达式,具有以下属性:

  • value: 表达式的内容。
  • tips: 表达式的提示信息,默认为空字符串。
  • error: 表达式的错误提示信息。
  • errorType: 错误类型,默认为业务错误。
  • level: 信息级别,默认为错误。
  • remark: 备注信息,默认为空字符串。
  • scope: 执行域,默认为两者都包含。

@Validation.Fun

@Validation.Fun(value = "",tips = "",remark = "",scope = FunctionScopeEnum.BOTH)

这个注解用于定义校验函数,具有以下属性:

  • value: 校验函数的内容。
  • tips: 校验函数的提示信息。
  • remark: 备注信息,默认为空字符串。
  • scope: 执行域,默认为两者都包含。

二、自定义服务器动作ServerAction

@Action注解将创建服务器动作,并@Model.model绑定

package pro.shushi.pamirs.demo.core.action;//import

@Model.model(PetShopProxy.MODEL_MODEL)
@Component
public class PetShopProxyAction{
 
    @Action(displayName = "启用")
    public PetShopProxy dataStatusEnable(PetShopProxy data){
        data = super.dataStatusEnable(data);
        data.updateById();
        return data;
    }

}

注意点: 自定义ServerAction请勿使用get、set、unset开头命名方法或toString命名方法。

ServerAction之校验(举例)

使用 @Validation 注解为 PetShopProxyActiondataStatusEnable 服务端动作进行校验表达式配置:

package pro.shushi.pamirs.demo.core.action;

……引用类

@Model.model(PetShopProxy.MODEL_MODEL)
@Component
public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> {

    @Override
    protected PetShopProxy fetchData(PetShopProxy data) {
        return data.queryById();
    }
    @Validation(ruleWithTips = {
            @Validation.Rule(value = "!IS_BLANK(data.code)", error = "编码为必填项"),
            @Validation.Rule(value = "LEN(data.shopName) < 128", error = "名称过长,不能超过128位"),
    })
    @Action(displayName = "启用")
    public PetShopProxy dataStatusEnable(PetShopProxy data){
        data = super.dataStatusEnable(data);
        data.updateById();
        return data;
    }

……其他代码

}

注:

  1. ruleWithTips可以声明多个校验规则及错误提示
  2. IS_BLANK和LEN为内置文本函数

ServerAction之前端展示规则(举例)

使用注解 @Action.Advanced 来定义动作的可见性规则,以便在前端进行识别。在这种写法中, invisible 属性表示动作在前端是否可见的规则,其值是一个逻辑表达式,用于确定动作的可见性。 在表达式中,activeRecord 表示当前记录对象,在前端中使用。尽管在写法上存在差异,但是内置函数的使用在前后端是一致的。

package pro.shushi.pamirs.demo.core.action;

……引用类

@Model.model(PetShopProxy.MODEL_MODEL)
@Component
public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> {

    @Override
    protected PetShopProxy fetchData(PetShopProxy data) {
        return data.queryById();
    }
    @Validation(ruleWithTips = {
            @Validation.Rule(value = "!IS_BLANK(data.code)", error = "编码为必填项"),
            @Validation.Rule(value = "LEN(data.name) < 128", error = "名称过长,不能超过128位"),
    })
    @Action(displayName = "启用")
    @Action.Advanced(invisible="!(activeRecord.code !== undefined && !IS_BLANK(activeRecord.code))")
    public PetShopProxy dataStatusEnable(PetShopProxy data){
        data = super.dataStatusEnable(data);
        data.updateById();
        return data;
    }

……其他代码

}