Vaadin 7 - add Buttons as generatedProperty to Grid
I am filling a Grid with a beanItemContainer and i want to add several buttons for different functions and redirections in each of my rows.
So far i created a BeanItemContainer and wrapped it with a GeneratedPropertyContainer like this:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
Now i tried to add a generated Property like this:
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;
);
and further down my Code
getColumn("buttons").setRenderer(new ButtonRenderer());
However, this is only one Button, where i need multiple and on top of that its not even working.
it fails with he following Error
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])
Also, instead of a button, a clickable icon (preferably a Fontawesome one) would be sufficient for my usecase.
button grid icons vaadin7 renderer
add a comment |
I am filling a Grid with a beanItemContainer and i want to add several buttons for different functions and redirections in each of my rows.
So far i created a BeanItemContainer and wrapped it with a GeneratedPropertyContainer like this:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
Now i tried to add a generated Property like this:
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;
);
and further down my Code
getColumn("buttons").setRenderer(new ButtonRenderer());
However, this is only one Button, where i need multiple and on top of that its not even working.
it fails with he following Error
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])
Also, instead of a button, a clickable icon (preferably a Fontawesome one) would be sufficient for my usecase.
button grid icons vaadin7 renderer
add a comment |
I am filling a Grid with a beanItemContainer and i want to add several buttons for different functions and redirections in each of my rows.
So far i created a BeanItemContainer and wrapped it with a GeneratedPropertyContainer like this:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
Now i tried to add a generated Property like this:
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;
);
and further down my Code
getColumn("buttons").setRenderer(new ButtonRenderer());
However, this is only one Button, where i need multiple and on top of that its not even working.
it fails with he following Error
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])
Also, instead of a button, a clickable icon (preferably a Fontawesome one) would be sufficient for my usecase.
button grid icons vaadin7 renderer
I am filling a Grid with a beanItemContainer and i want to add several buttons for different functions and redirections in each of my rows.
So far i created a BeanItemContainer and wrapped it with a GeneratedPropertyContainer like this:
private BeanItemContainer<Foo> fooContainer = new BeanItemContainer<Foo>(Foo.class);
private GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(fooContainer);
Now i tried to add a generated Property like this:
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;
);
and further down my Code
getColumn("buttons").setRenderer(new ButtonRenderer());
However, this is only one Button, where i need multiple and on top of that its not even working.
it fails with he following Error
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])
Also, instead of a button, a clickable icon (preferably a Fontawesome one) would be sufficient for my usecase.
button grid icons vaadin7 renderer
button grid icons vaadin7 renderer
asked Nov 13 '18 at 14:49
Martin WasGehtSieDasAnMartin WasGehtSieDasAn
1348
1348
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The pattern of adding generated property to a Grid is as follows
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);
You will need one property i.e. one column per button. The ButtonRenderer does not know how to render multiple buttons in one column.
There is GridActionRenderer add-on in Vaadin Directory, which is more advanced renderer designed for the case where you want compactly set of buttons in one column, e.g. toolbox of operations
https://vaadin.com/directory/component/gridactionrenderer-add-on
I am also quite fond of alternative UX approach of this type of use cases, where you want to have something to trigger actions on Grid rows, and that is ContextMenu. Many buttons per row produce visual clutter, takes aways space that otherwise could be used for showing data, and also slows down your Grid rendering speed. So it is worth of thinking to put these operations in context menu instead.
https://vaadin.com/directory/component/vaadin-contextmenu
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53283614%2fvaadin-7-add-buttons-as-generatedproperty-to-grid%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The pattern of adding generated property to a Grid is as follows
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);
You will need one property i.e. one column per button. The ButtonRenderer does not know how to render multiple buttons in one column.
There is GridActionRenderer add-on in Vaadin Directory, which is more advanced renderer designed for the case where you want compactly set of buttons in one column, e.g. toolbox of operations
https://vaadin.com/directory/component/gridactionrenderer-add-on
I am also quite fond of alternative UX approach of this type of use cases, where you want to have something to trigger actions on Grid rows, and that is ContextMenu. Many buttons per row produce visual clutter, takes aways space that otherwise could be used for showing data, and also slows down your Grid rendering speed. So it is worth of thinking to put these operations in context menu instead.
https://vaadin.com/directory/component/vaadin-contextmenu
add a comment |
The pattern of adding generated property to a Grid is as follows
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);
You will need one property i.e. one column per button. The ButtonRenderer does not know how to render multiple buttons in one column.
There is GridActionRenderer add-on in Vaadin Directory, which is more advanced renderer designed for the case where you want compactly set of buttons in one column, e.g. toolbox of operations
https://vaadin.com/directory/component/gridactionrenderer-add-on
I am also quite fond of alternative UX approach of this type of use cases, where you want to have something to trigger actions on Grid rows, and that is ContextMenu. Many buttons per row produce visual clutter, takes aways space that otherwise could be used for showing data, and also slows down your Grid rendering speed. So it is worth of thinking to put these operations in context menu instead.
https://vaadin.com/directory/component/vaadin-contextmenu
add a comment |
The pattern of adding generated property to a Grid is as follows
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);
You will need one property i.e. one column per button. The ButtonRenderer does not know how to render multiple buttons in one column.
There is GridActionRenderer add-on in Vaadin Directory, which is more advanced renderer designed for the case where you want compactly set of buttons in one column, e.g. toolbox of operations
https://vaadin.com/directory/component/gridactionrenderer-add-on
I am also quite fond of alternative UX approach of this type of use cases, where you want to have something to trigger actions on Grid rows, and that is ContextMenu. Many buttons per row produce visual clutter, takes aways space that otherwise could be used for showing data, and also slows down your Grid rendering speed. So it is worth of thinking to put these operations in context menu instead.
https://vaadin.com/directory/component/vaadin-contextmenu
The pattern of adding generated property to a Grid is as follows
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);
You will need one property i.e. one column per button. The ButtonRenderer does not know how to render multiple buttons in one column.
There is GridActionRenderer add-on in Vaadin Directory, which is more advanced renderer designed for the case where you want compactly set of buttons in one column, e.g. toolbox of operations
https://vaadin.com/directory/component/gridactionrenderer-add-on
I am also quite fond of alternative UX approach of this type of use cases, where you want to have something to trigger actions on Grid rows, and that is ContextMenu. Many buttons per row produce visual clutter, takes aways space that otherwise could be used for showing data, and also slows down your Grid rendering speed. So it is worth of thinking to put these operations in context menu instead.
https://vaadin.com/directory/component/vaadin-contextmenu
answered Nov 18 '18 at 11:55
Tatu LundTatu Lund
2,404139
2,404139
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53283614%2fvaadin-7-add-buttons-as-generatedproperty-to-grid%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown