页面如何内嵌其他页面参考:https://club.kdcloud.com/article/50228952697954816
1、样例主要解决多页签,每个页签弹出一个页面或者列表,但是每次showForm就会出现抖动现象, 处理这个抖动现象可以使用父页面刷新子页面某些控件实现,
如:在父页面弹出分组基础资料列表页面,想隐藏分组基础资料模板列表bos_templatetreelist的一些控件包含下级、搜索控件等,这个隐藏的代码可以在子页面插件的initialize方法用this.getView().setVisible(false, "iscontainlower", "searchap");设置
2、在父页面插件
/**
billFormId 表单标识
flexId 内嵌到容器面板标识
*/
private void showList(String billFormId,String flexId) {
ListShowParameter showParameter = new ListShowParameter();
showParameter.setBillFormId(billFormId);
showParameter.getOpenStyle().setShowType(ShowType.InContainer);
showParameter.getOpenStyle().setTargetKey(flexId);
StyleCss style = new StyleCss();
style.setWidth("100%");
style.setHeight("100%");
showParameter.getOpenStyle().setInlineStyleCss(style);
this.getView().showForm(showParameter);
if (StringUtils.equals(billFormId, ”某子页面标识“)) {
// 记录当前子页面
this.getPageCache().put(”childpageid", showParameter.getPageId());
}
}
3、页签点击事件监听,实现接口implements TabSelectListener
@Override
public void registerListener(EventObject e) {
Tab tab = this.getView().getControl("dmp_tabap");// tab切换页
tab.addTabSelectListener(this);// 监听选择tab
}
页签点击事件
@Override
public void tabSelected(TabSelectEvent arg0) {
String tabKey = arg0.getTabKey();
if (StringUtils.equals(tabKey, "页签标识")) {
//用个状态字段去保存是否打开了页面,打开了就不需要再打开
Integer status = (Integer) this.getModel().getValue("_status");
if (status != 1 && status != 2) {
this.showList(“子页面标识”, “父页面容器标识”);
this.getModel().setValue("status", 1);
}else if(status==2) {
this.handleChildPage();
}
}
}
4、父页面向子页面刷新
private void handleChildPage() {
String childPageId = this.getPageCache().get("childpageid");
IFormView childView = null;
if (StringUtils.isNotBlank(childPageId)) {
//获取子页面的view
childView = this.getView().getView(childPageId);
ListView listView = (ListView) childView;
ITreeListView treeListView = listView.getTreeListView();
treeListView.refresh();
BillList billlist = childView.getControl("billlistap");
billlist.refresh();
//发送指令,不可缺少
this.getView().sendFormAction(childView);
}
}
end ...
推荐阅读