1.扩展Controller1.扩展Controller
一、 说明
在某些情况下,项目组需要根据自己的业务需求编写前端代码后,直接请求到自己的控制器上。
二、 例子
1、 先自定义个js,此步骤可以参考【自定义js】。
举个例子,此处写了个自定义的方法请求控制器。
/*
修改类型
*/
$scope.custExtendCtrTestLixq301Db = function(){
if($scope.testLixq301DbCheckedRows.length !=1){
GillionMsg.alert("提示信息","请勾选一条记录!");
return;
}
var params={};
params.id = $scope.testLixq301DbCheckedRows[0].testLixq301Id;
params.cascade=false;
$http.get($config.ctx
+ '/testLixq301Db/modifyTestCaseType',{params:params}).success(function(data){
if(data.success != undefined && data.success == true) {
$scope.getTestLixq301DbPages();
}
},1);
};
2、 在工程中定义编写自己扩展的的Controller文件
2.1. 文件存放路径为:在你要扩展的控制器如下图的3中,新增个custom文件。将文件放在custom目录下。
2.2. 文件地址:建议是在要扩展的名称中添加Ext,如下图的3和2名称差别。
2.3. 对于要扩展的文件:要添加如下图4的注解,类要继承如下图5的方法,另外如下图6中的方法需要重载,属性要定义。
@Controller
@SuppressWarnings("all")
public class TestLixq301DbExtController extends BaseAbstractController {
protected static final String boName = "TestLixq301Db";
/* (non-Javadoc)
* @see com.gillion.framework.core.web.BaseAbstractController#getBoName()
*/
@Override
public String getBoName()
{
return boName;
}
@Autowired
private LocalValidatorFactoryBean validator;
@Autowired
protected TestLixq301DbService testLixq301DbService;
3、 编写自己的方法
举个栗子:
@RequestMapping(value = "testLixq301Db/modifyTestCaseType")
public void modifyTestCaseType(@RequestParam(value="id") Long id,@RequestParam(value="cascade") Boolean cascade, HttpServletResponse response) throws Exception
{
TestLixq301Db testLixq301Db=testLixq301DbService.get(id, cascade);
if("lixq6".equals(testLixq301Db.getTestCaseName())&& "1".equals(testLixq301Db.getTestCaseType())){
testLixq301Db.setTestCaseType("2");
testLixq301Db.setRowStatus(16);
testLixq301DbService.update(testLixq301Db);
}else{
throw new BusinessException("名称不为:lixq6且类型不为:一级,不修改数据!");
}
ResponseUtils.flushSuccess(response, "请求成功!", "testLixq301Db", testLixq301Db);
}
4、 效果
举个栗子:
2.扩展Service2.扩展Service
2.1. 功能说明
平台实现的功能一般是增删查改的功能,没有对应的业务逻辑。而真正的项目的保存,修改保存,查询、删除,批量删除前、后可能会有些业务逻辑需要处理,这个时候就可以通过扩展Service实现。
2.2. 传入参数说明
不同的系统方法,调用自定义服务类方法时传入参数说明:
public void validContract4Confirm(MfOrder mfOrder){ }
public void deletePre(Long id){ }
public void deleteBefore(Long[] ids){ }
public void find(BaseExample example){ }
2.3. 范例说明
此处以删除前扩展service服务为例子
配置
- 编写service的java文件
1)文件存放路径为:在你要扩展的service中,新增个custom文件。将文件放在custom目录下。
2)文件地址:建议是在要扩展的名称中添加Ext,和平台生成的ServiceImpl文件区别。
3)service为接口,继承IBaseService,在接口中定义自己的方法。
public interface TestLixq301DbExtService extends IBaseService<Long,TestLixq301Db,TestLixq301DbExample> {
public void deletePre(Long id);
}
4)在service实现类中加入@Service注解,且实现类要继承BaseServiceImpExt,然后在自己的服务编写自己的逻辑代码。
@Service
@SuppressWarnings("all")
public class TestLixq301DbExtServiceImpl extends BaseServiceImplExt<Long,TestLixq301Db,TestLixq301DbExample>
implements TestLixq301DbExtService {
@Override
public void deletePre(Long id){
TestLixq301Db testLixq301Db=new TestLixq301Db();
TestLixq301DbService testLixq301DbService = SpringContextHolder.getBean(TestLixq301DbService.class);
testLixq301Db=testLixq301DbService.get(id);
if("1".equals(testLixq301Db.getOrderType())){
throw new BusinessException("订单类型为OrderType1时,不允许删除!");
}
}
}
2.对象建模–业务对象–业务对象管理:编辑业务对象,点击【业务对象扩展】tab页,新增一笔记录,填写扩展Service文件名称,类型为:Java Service,路径为扩展service在工程中的路径。
3.编辑业务对象,在【方法定义】tab页找到删除方法,并进行编辑,在【调用规则表】tab页新增一笔记录,扩展名称为扩展Service的名称,执行类型为:Java Service,执行内容为Service中的方法名称,调用时机为执行之前。
代码
public void delete(Long id){
testLixq301DbExtService.deletePre(id);
List<Long> testLixq301Ids = Lists.newArrayList(id);
TestLixq301DbExample testLixq301DbExample = TestLixq301DbExample.create();
testLixq301DbExample.and().andCreateCondition(TestLixq301Db.TESTLIXQ301ID,"testLixq301Id",Operation.IN,Arrays.asList(id));
if (!testLixq301Ids.isEmpty()){
testLixq301DetailDbService.deleteWithParent(testLixq301Ids);
}
super.delete(id);
}
RowStatus说明 RowStatus说明
1、初始值,没有改变过。
public final static int ROWSTATUS_UNCHANGED = 2;
2、新增的状态。
public final static int ROWSTATUS_ADDED = 4;
3、删除的状态。
public final static int ROWSTATUS_DELETED = 8;
4、修改过的状态。
public final static int ROWSTATUS_MODIFIED = 16;
5、新加载时的状态。
public final static int ROWSTATUS_LOADING = 32;
6、每行的状态,包括四种状态。
@Transient
private int rowStatus = ROWSTATUS_UNCHANGED;
7、判断实体是否处于修改状态(包含添加,修改,删除)
@Transient
@JsonIgnore
public boolean isDirty()
{
return this.rowStatus == ROWSTATUS_ADDED || this.rowStatus == ROWSTATUS_DELETED || this.rowStatus == ROWSTATUS_MODIFIED;
}
8、根据实体的前一个状态设置为修改后的状态,”Detached and Added to Added”,”Unchaged to Modify”
public void setModifyStatus()
{
if (getRowStatus() == BaseObject.ROWSTATUS_DETACHED || getRowStatus() == BaseObject.ROWSTATUS_ADDED)
{
setRowStatus(BaseObject.ROWSTATUS_ADDED);
}
else
{
setRowStatus(BaseObject.ROWSTATUS_MODIFIED);
}
}
扩展JS中引项目组JS代码扩展JS中引项目组JS代码
一、关键字
- 引入公共js、项目组js文件引入
二、注意点
- 3.0.0.0+版本支持
- 本例子是针对分布式服务编写的,如果是单系统的引入js文件处方式需微调
三、效果
- 项目组抽取的公共代码,例如每个基础数据界面都有共通的按钮,生效,失效,逻辑是一样的,差异仅仅是传入参数不一致,此时可以抽取一份公共的js文件,其他对象只需要引入此份js文件,调用里面的方法即可。
四、配置
-
项目组需要根据实际抽取相应的功能js文件,此份文件需要遵循requirejs的格式,例如下图所示
-
将编写好的文件放入项目路径下面,例如:
xiangyu_dev\xy_www\static\app\custom\action\effectAction.js
-
打开具体对象的二次开发扩展js文件1)引入文件;2)定义引入变量;3)调用函数;如下图所示。
五、代码
- 略