CUBA 平台:table 操作中作为对话框打开的编辑器的无效 window 高度
CUBA platform : invalid window height for editor opened as dialog from a table action
我有一个屏幕,其中 table 处理与一个实体(简单的 2 个字段)的多对多关系,还为其定义了 1 个记录。
我为关联实体创建了标准浏览器屏幕,并为上一个屏幕的操作 table "add" 定义了 openType = DIALOG。
然后对话框window在高度上压缩太多了(见下面的截图),我想这是因为没有足够的实体来显示所以高度计算是错误的。
如果我在对话框 window 上执行 "analyse layout",我会收到以下警告:
[WARN] Nested component 'contactEmailsTable'
Nested component has relative height 100.0% inside window with undefined height
作为解决方法,我尝试在工作室中手动设置 table 高度,但没成功。
在工作室中没有看到在哪里可以手动设置 window 高度,所以我试图通过覆盖 init 方法(见下文)重新定义它,没有机会。
@Override
public void init(Map<String, Object> params) {
super.init(params);
int unit = getHeightUnits();
float height = getHeight();
switch(unit) {
case UNITS_PIXELS:
setHeight(""+height * 1.10f+"px");
case UNITS_PERCENTAGE:
setHeight(""+Math.min(100, height + 0.10f)+"%");
}
}
下面是上述对话框的xml。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
caption="msg://browseCaption"
class="com.busy.busyapp.gui.contactemail.ContactEmailBrowse"
focusComponent="contactEmailsTable"
lookupComponent="contactEmailsTable"
messagesPack="com.busy.busyapp.gui.contactemail">
<dsContext>
<collectionDatasource id="contactEmailsDs"
class="com.busy.busyapp.entity.ContactEmail"
view="_local">
<query>
<![CDATA[select e from busyapp$ContactEmail e]]>
</query>
</collectionDatasource>
</dsContext>
<layout expand="contactEmailsTable"
spacing="true">
<filter id="filter"
applyTo="contactEmailsTable"
datasource="contactEmailsDs">
<properties include=".*"/>
</filter>
<table id="contactEmailsTable"
presentations="true"
width="100%">
<actions>
<action id="create"/>
<action id="edit"/>
<action id="remove"/>
<action id="excel"/>
</actions>
<columns>
<column id="label"/>
<column id="email"/>
</columns>
<rows datasource="contactEmailsDs"/>
<rowsCount/>
<buttonsPanel id="buttonsPanel"
alwaysVisible="true">
<button id="createBtn"
action="contactEmailsTable.create"/>
<button id="editBtn"
action="contactEmailsTable.edit"/>
<button id="removeBtn"
action="contactEmailsTable.remove"/>
<button id="excelBtn"
action="contactEmailsTable.excel"/>
</buttonsPanel>
</table>
</layout>
以下示例展示了如何管理对话框 window 维度。
以定义的宽度和高度的对话框形式打开屏幕:
openEditor(entity, OpenType.DIALOG.width(480).height(320));
在其控制器中设置屏幕的宽度和高度:
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setWidth(480).setHeight(320);
}
在XML描述符中相同:
<dsContext/>
<dialogMode width="480" height="320"/>
<layout/>
指定屏幕应始终作为对话框打开:
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setForceDialog(true);
}
在XML描述符中相同:
<dsContext/>
<dialogMode forceDialog="true"/>
<layout/>
我有一个屏幕,其中 table 处理与一个实体(简单的 2 个字段)的多对多关系,还为其定义了 1 个记录。
我为关联实体创建了标准浏览器屏幕,并为上一个屏幕的操作 table "add" 定义了 openType = DIALOG。
然后对话框window在高度上压缩太多了(见下面的截图),我想这是因为没有足够的实体来显示所以高度计算是错误的。
如果我在对话框 window 上执行 "analyse layout",我会收到以下警告:
[WARN] Nested component 'contactEmailsTable'
Nested component has relative height 100.0% inside window with undefined height
作为解决方法,我尝试在工作室中手动设置 table 高度,但没成功。
在工作室中没有看到在哪里可以手动设置 window 高度,所以我试图通过覆盖 init 方法(见下文)重新定义它,没有机会。
@Override
public void init(Map<String, Object> params) {
super.init(params);
int unit = getHeightUnits();
float height = getHeight();
switch(unit) {
case UNITS_PIXELS:
setHeight(""+height * 1.10f+"px");
case UNITS_PERCENTAGE:
setHeight(""+Math.min(100, height + 0.10f)+"%");
}
}
下面是上述对话框的xml。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
caption="msg://browseCaption"
class="com.busy.busyapp.gui.contactemail.ContactEmailBrowse"
focusComponent="contactEmailsTable"
lookupComponent="contactEmailsTable"
messagesPack="com.busy.busyapp.gui.contactemail">
<dsContext>
<collectionDatasource id="contactEmailsDs"
class="com.busy.busyapp.entity.ContactEmail"
view="_local">
<query>
<![CDATA[select e from busyapp$ContactEmail e]]>
</query>
</collectionDatasource>
</dsContext>
<layout expand="contactEmailsTable"
spacing="true">
<filter id="filter"
applyTo="contactEmailsTable"
datasource="contactEmailsDs">
<properties include=".*"/>
</filter>
<table id="contactEmailsTable"
presentations="true"
width="100%">
<actions>
<action id="create"/>
<action id="edit"/>
<action id="remove"/>
<action id="excel"/>
</actions>
<columns>
<column id="label"/>
<column id="email"/>
</columns>
<rows datasource="contactEmailsDs"/>
<rowsCount/>
<buttonsPanel id="buttonsPanel"
alwaysVisible="true">
<button id="createBtn"
action="contactEmailsTable.create"/>
<button id="editBtn"
action="contactEmailsTable.edit"/>
<button id="removeBtn"
action="contactEmailsTable.remove"/>
<button id="excelBtn"
action="contactEmailsTable.excel"/>
</buttonsPanel>
</table>
</layout>
以下示例展示了如何管理对话框 window 维度。
以定义的宽度和高度的对话框形式打开屏幕:
openEditor(entity, OpenType.DIALOG.width(480).height(320));
在其控制器中设置屏幕的宽度和高度:
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setWidth(480).setHeight(320);
}
在XML描述符中相同:
<dsContext/>
<dialogMode width="480" height="320"/>
<layout/>
指定屏幕应始终作为对话框打开:
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setForceDialog(true);
}
在XML描述符中相同:
<dsContext/>
<dialogMode forceDialog="true"/>
<layout/>