服务器动作ServerAction
大约 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
注解为 PetShopProxyAction
的 dataStatusEnable
服务端动作进行校验表达式配置:
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;
}
……其他代码
}
注:
- ruleWithTips可以声明多个校验规则及错误提示
- 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;
}
……其他代码
}