Vaadin 7 - 将按钮作为生成的属性添加到网格
Vaadin 7 - add Buttons as generatedProperty to Grid
我正在用 beanItemContainer 填充网格,我想在每一行中为不同的功能和重定向添加几个按钮。
到目前为止,我创建了一个 BeanItemContainer 并用 Generated属性Container 包装它,如下所示:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
现在我尝试添加生成的 属性,如下所示:
wrapperContainer.addGeneratedProperty("buttons", new PropertyValueGenerator<Button>()
{
@Override
public Button getValue(Item item, Object itemId, Object propertyId)
{
ClickListener fooBarClickListener = new ClickListener()
{
@Override
public void buttonClick(ClickEvent event)
{
// do something
}
};
Button button = new Button(FontAwesome.USER);
button.addClickListener(fooBarClickListener);
return button;
}
@Override
public Class<Button> getType()
{
return Button.class;
}
});
再往下看我的代码
getColumn("buttons").setRenderer(new ButtonRenderer());
但是,这只是一个按钮,我需要多个按钮,除此之外,它甚至都不起作用。
失败并出现以下错误
Cannot remove converter, as renderer's presentation type java.lang.String and column's model com.vaadin.ui.Button type aren't directly compatible with each other (in Column[propertyId:buttons])
另外,一个可点击的图标(最好是 Fontawesome 图标)就足以满足我的用例。
将生成的属性添加到Grid中的模式如下
Grid grid = new Grid();
...
ButtonRenderer buttonRenderer = new ButtonRenderer();
... // add click listener etc
GeneratedPropertyContainer gpc = rowIndex.addGeneratedProperty("button1", container);
grid.setContainerDataSource(gpc);
grid.getColumn("button").setRenderer(buttonRenderer);
您将需要一个 属性,即每个按钮一列。 ButtonRenderer 不知道如何在一列中呈现多个按钮。
Vaadin Directory 中有 GridActionRenderer 附加组件,它是更高级的渲染器,专为需要在一列中紧凑设置按钮的情况而设计,例如操作工具箱
https://vaadin.com/directory/component/gridactionrenderer-add-on
我也非常喜欢此类用例的替代 UX 方法,在这种情况下,您希望有一些东西来触发对网格行的操作,那就是 ContextMenu。每行的许多按钮会产生视觉混乱,带走 space 否则可用于显示数据,并且还会减慢您的网格渲染速度。因此值得考虑将这些操作放在上下文菜单中。
我正在用 beanItemContainer 填充网格,我想在每一行中为不同的功能和重定向添加几个按钮。
到目前为止,我创建了一个 BeanItemContainer 并用 Generated属性Container 包装它,如下所示:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
现在我尝试添加生成的 属性,如下所示:
wrapperContainer.addGeneratedProperty("buttons", new PropertyValueGenerator<Button>()
{
@Override
public Button getValue(Item item, Object itemId, Object propertyId)
{
ClickListener fooBarClickListener = new ClickListener()
{
@Override
public void buttonClick(ClickEvent event)
{
// do something
}
};
Button button = new Button(FontAwesome.USER);
button.addClickListener(fooBarClickListener);
return button;
}
@Override
public Class<Button> getType()
{
return Button.class;
}
});
再往下看我的代码
getColumn("buttons").setRenderer(new ButtonRenderer());
但是,这只是一个按钮,我需要多个按钮,除此之外,它甚至都不起作用。
失败并出现以下错误
Cannot remove converter, as renderer's presentation type java.lang.String and column's model com.vaadin.ui.Button type aren't directly compatible with each other (in Column[propertyId:buttons])
另外,一个可点击的图标(最好是 Fontawesome 图标)就足以满足我的用例。
将生成的属性添加到Grid中的模式如下
Grid grid = new Grid();
...
ButtonRenderer buttonRenderer = new ButtonRenderer();
... // add click listener etc
GeneratedPropertyContainer gpc = rowIndex.addGeneratedProperty("button1", container);
grid.setContainerDataSource(gpc);
grid.getColumn("button").setRenderer(buttonRenderer);
您将需要一个 属性,即每个按钮一列。 ButtonRenderer 不知道如何在一列中呈现多个按钮。
Vaadin Directory 中有 GridActionRenderer 附加组件,它是更高级的渲染器,专为需要在一列中紧凑设置按钮的情况而设计,例如操作工具箱
https://vaadin.com/directory/component/gridactionrenderer-add-on
我也非常喜欢此类用例的替代 UX 方法,在这种情况下,您希望有一些东西来触发对网格行的操作,那就是 ContextMenu。每行的许多按钮会产生视觉混乱,带走 space 否则可用于显示数据,并且还会减慢您的网格渲染速度。因此值得考虑将这些操作放在上下文菜单中。