groupTabLayout提供对TabLayout中页签进行分组的功能,它页签长在左侧,多个页签可以归组,每组可以收起和展开。
表 31.21.
| Component Type | org.operamasks.faces.component.layout.impl.UIGroupTabLayout |
| Component Family | org.operamasks.faces.component.layout.impl.UIPanel |
| Component Class | org.operamasks.faces.component.layout.impl.UIGroupTabLayout |
| Tag Class | org.operamasks.faces.webapp.layout.UIGroupTabLayoutTag |
| Renderer Type | org.operamasks.faces.component.layout.impl.UIGroupTabLayout |
| Renderer Class(AJAX) | org.operamasks.faces.render.layout.ajax.AjaxGroupTabLayoutRenderer |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++org.operamasks.faces.component.layout.base.UIPanelBase
+++++org.operamasks.faces.component.layout.impl.UIPanel
++++++org.operamasks.faces.component.layout.impl.UILayout
+++++++org.operamasks.faces.component.layout.base.UITabLayoutBase
++++++++org.operamasks.faces.component.layout.impl.UITabLayout
+++++++++org.operamasks.faces.component.layout.base.UIGroupTabLayoutBase
++++++++++org.operamasks.faces.component.layout.impl.UIGroupTabLayout
表 31.22. 属性
| activeGroup | 定义类 | org.operamasks.faces.component.layout.impl.UIGroupTabLayout | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 初始时激活的group序号 | ||||
| animCollapse | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 在构件收缩时是否显示动画效果 | ||||
| animFloat | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否允许面板收缩/展开的激活. 当点击一个收缩区域的bar时,这个区域的面板就会显示成一个浮动的面板,并且当鼠标移开该区域(或者在autoHide被设置成false时,点击面板外的地方)时,面板会收缩。把animFloat设置成false可以阻止面板收缩/展开的激活 (默认值:true) | ||||
| autoHeight | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否允许构件自适应高度(默认值: false). | ||||
| autoHide | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 鼠标移开浮动面板时面板是否自动收缩 (默认值:true) | ||||
| autoWidth | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否允许构件自适应宽度 (默认值:false) | ||||
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| bodyStyle | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 容器内元素使用的CSS样式 | ||||
| border | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否显示面板body元素的边框(默认值:true)。默认情况下,边框是一个2px宽的内嵌边框,但当bodyBorder属性被设置成false时可以进一步修改 | ||||
| colspan | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件占据的列数 | ||||
| columnWidth | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Float) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件宽度的百分比小数值 | ||||
| fit | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件是否充满父容器 | ||||
| floating | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 面板是否漂浮 (默认值:false) | ||||
| groupWidth | 定义类 | org.operamasks.faces.component.layout.impl.UIGroupTabLayout | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 每个group的宽度 | ||||
| height | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件高度的像素值 (默认是auto) | ||||
| hideBorders | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否隐藏边框。为true时隐藏内部构件的边框, 为false时适应内部构件的边框设置 (默认值:false). | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| initConfig | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Object) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 初始化配置对象。取值可以是ExtConfig对象, 或String,表示一个JavaScript对象,比如:{"a": "avalue", "b":true, "c":200, "d":"var::dvalue"} 如果取值是表示一个JavaScript对象的String,则key必须用(双)引号包起来,比如"a"。 | ||||
| jsvar | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 客户端脚本使用的javascript变量名 | ||||
| maskDisabled | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 在面板disabled时,是否用直观的方式标识 (默认值:true) | ||||
| onbeforeexpand | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件展开前执行的JavaScript代码 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| rowspan | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件占据的行数 | ||||
| shadow | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件是否显示阴影效果.该属性仅在floating属性被设置成true时有效 | ||||
| shadowOffset | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 阴影偏离的像素数 (默认值:4).该属性仅在floating属性被设置成true时有效 | ||||
| shim | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否在需要的时候enable内框架边界 (默认值:true). 该属性仅在floating属性被设置成true时有效 | ||||
| showTitleOnCollapse | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 在构件收缩后是否显示标题 (默认值:false). 注意:该属性仅在region="north"或者region="south",属性被设置成true时有效 | ||||
| style | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格,对应于元素的style属性 | ||||
| styleClass | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 空格分隔的CSS风格类名列表,渲染时作为元素的"class"属性 | ||||
| toolBarPosition | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 内置工具栏的位置,可能的取值为"top","bottom",或"both"。 | ||||
| width | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件宽度的像素值 (默认是auto) | ||||
| x | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件左边界距离父容器左边界的像素数 | ||||
| y | 定义类 | org.operamasks.faces.component.layout.impl.UIPanel | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件上边界距离父容器上边界的像素数 | ||||
下面的示例演示了分组页签的使用方法,layout:groupTabLayout布局的子标签是layout:groupTabPanel,其负责容纳各个layout:panel.
<layout:groupTabLayout activeGroup="1" tabWidth="130" fit="true" style=" border: 0px solid red;">
<layout:groupTabPanel mainItem="0">
<layout:panel title="公司信息" autoScroll="true" onactivate="gridJsvar.syncSize();" >
<w:dataGrid id="grid" jsvar="gridJsvar" paged="true" rows="10" width="800" height="400" >
<w:outputColumn id="id" hidden="true" hidable="false" />
<w:outputColumn id="name" align="center" sortable="true" header="公司" />
<w:outputColumn id="leadingProduct" header="主打产品" />
<w:outputColumn id="address" header="地址" />
<w:outputColumn id="phone" header="联系电话" />
<w:outputColumn id="homepage" header="公司主页" />
<w:pagingToolbar displayInfo="true" displayMsg="显示 {0} - {1},共 {2} 条" />
</w:dataGrid>
</layout:panel>
<layout:panel title="员工信息" onactivate="employeeGridJsvar.syncSize();" autoScroll="true" >
<w:dataGrid id="employeeGrid" jsvar="employeeGridJsvar" paged="true" rows="10" width="800" height="400" >
<w:outputColumn id="id" hidden="true" hidable="false" />
<w:outputColumn id="departmentId" hidden="true" hidable="false" />
<w:outputColumn id="name" width="200" align="center" sortable="true" header="名称" />
<w:outputColumn id="companyName" width="300" header="所在公司名称" />
<w:outputColumn id="departmentName" header="所在部门名称" />
</w:dataGrid>
</layout:panel>
</layout:groupTabPanel>
<layout:groupTabPanel mainItem="1" >
<layout:panel title="title3" jsvar="panel3" url="caseinfo/groupTabsLayout_detail.xhtml" >
</layout:panel>
<layout:panel title="title4" jsvar="panel4" >这是title4的内容</layout:panel>
</layout:groupTabPanel>
</layout:groupTabLayout>ManagedBean:
@ManagedBean(name = "ux.layout.groupTabsLayoutBean", scope = ManagedBeanScope.REQUEST)
public class GroupTabsLayoutBean {
@ManagedProperty("#{companyService}")
private CompanyService companyService;
@ManagedProperty("#{employeeService}")
private EmployeeService employeeService;
@ManagedProperty("#{departmentService}")
private DepartmentService departmentService;
@Bind(id = "grid")
private List<Company> getCompanys() {
return companyService.findAll();
}
@SaveState
private List<Employee> employees;
@Bind(id = "employeeGrid")
private List<Employee> getEmployess() {
return employees;
}
@BeforeRender
public void beforeRender(boolean isPostback) {
if (!isPostback) {
employees = employeeService.findAll();
for (Employee employee : employees) {
Department department = departmentService.findById(employee.getDepartmentId());
employee.setDepartmentName(department.getName());
employee.setCompanyName(companyService.findById(department.getCompanyId())
.getName());
}
}
}
}