Hey alle zusammen
Aktuell arbeite ich an einem Anfänger Projekt um Vaadin zu lernen. Was aktuell passiert ist, dass aus einer Liste von Styles eine Tabelle erzeugt wird und wenn ich dann einen dieser Styles auswähle eine 2 auf der Seite erscheint mit den zugehörigen Items zu diesem Style. Das funktioniert! Nun ist das allerdings wie ich ahne überhaupt nicht im MVP Pattern wie es eig sein sollte bzw wie ich es haben will. Hier meine Klasse TraineeViewImpl:
@SuppressWarnings("serial")
@SpringView(
name = TraineeViewImpl.VIEW_NAME,
ui = { TraineeUI.class },
isDefault = false,
order = 30)
public class TraineeViewImpl extends AbstractMvpView<TraineeView.Presenter> implements TraineeView {
public static final String VIEW_NAME = "TRAINEE";
private static final Logger log = Logger.getLogger( TraineeView.class.getName() );
BeanItemTable<Style> tableWithAllStyles;
BeanItemTable<de.bonprix.sample.trainee.dto.Item> tableWithAllItems;
HorizontalLayout horizontalLayoutWithStyles;
HorizontalLayout horizontalLayoutWithItems;
HorizontalLayout horizontalLayoutWithStyleAndItemTable;
List<Style> listOfAllStyles;
@Override
protected void initializeUI() {
Dialog dialog = new Dialog(new Frame() , true);
horizontalLayoutWithStyles = new HorizontalLayout();
horizontalLayoutWithStyleAndItemTable = new HorizontalLayout();
horizontalLayoutWithItems = new HorizontalLayout();
tableWithAllStyles = createTableWithAllStyles();
horizontalLayoutWithStyles.addComponent(tableWithAllStyles);
horizontalLayoutWithStyles.setSizeFull();
horizontalLayoutWithItems.setSizeFull();
horizontalLayoutWithStyleAndItemTable.addComponent(horizontalLayoutWithStyles);
horizontalLayoutWithStyleAndItemTable.addComponent(horizontalLayoutWithItems);
horizontalLayoutWithStyleAndItemTable.setSizeFull();
setCompositionRoot(horizontalLayoutWithStyleAndItemTable);
}
private BeanItemTable createTableWithAllStyles() {
BeanItemTable table = new BeanItemTable(Style.class);
table.setImmediate(true);
table.setSizeFull();
table.setSelectable(true);
table.addGeneratedColumn("image", (source, itemId, columnId) -> {
final Item item = source.getItem(itemId);
final String url = (String) item.getItemProperty("assetUrl")
.getValue();
return new Embedded("", new ExternalResource(url)) {
};
});
table.setVisibleColumns("styleId","styleNo", "image");
table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
Style chosenStyle = (Style) event.getItemId();
try{
Set<de.bonprix.sample.trainee.dto.Item> items = chosenStyle.getItems();
tableWithAllItems = createItemTableForChosenStyle(items);
tableWithAllItems.setSizeFull();
horizontalLayoutWithItems.removeAllComponents();
horizontalLayoutWithItems.addComponent(tableWithAllItems);
}
catch (Exception e)
{
}
}
});
return table;
}
@Override
public void setStyleList(final List<Style> allStylesAndItems) {
listOfAllStyles = allStylesAndItems;
if (allStylesAndItems != null) {
tableWithAllStyles.addAllBeans(listOfAllStyles);
}
}
public BeanItemTable createItemTableForChosenStyle(Set<de.bonprix.sample.trainee.dto.Item> items)
{
BeanItemTable tableWithItemsBelongingToChosenStyle = new BeanItemTable(de.bonprix.sample.trainee.dto.Item.class);
Set<de.bonprix.sample.trainee.dto.Item> itemsOfChosenStyle = items;
try {
tableWithItemsBelongingToChosenStyle.addGeneratedColumn("image", (source, itemId, columnId) -> {
final Item item = source.getItem(itemId);
final String url = (String) item.getItemProperty("assetUrl").getValue();
return new Embedded("", new ExternalResource(url)) {
};
});
tableWithItemsBelongingToChosenStyle.addAllBeans(itemsOfChosenStyle);
tableWithItemsBelongingToChosenStyle.setVisibleColumns("itemId", "itemNo", "image");
}
catch(Exception e){
log.info("No Items found/ Other reasons");
}
return tableWithItemsBelongingToChosenStyle;
}
}
---
Vielleicht kann mir jemand von euch erklären was nun dort raus muss und wohin. Was genau wäre ein Model und was gehört in den Presenter. Habe mich etliche Videos angesehen, aber auf mein Beispiel verstehe ich es einfach nicht.... Bitte um eine Erklärung wenn es eine Antwort gibt :/ Will das echt begreifen.
Hier noch mein Presenter:
@SpringPresenter
public class TraineePresenter extends AbstractMvpViewPresenter<TraineeView> implements TraineeView.Presenter {
@Resource
private StyleService styleService;
@Override
public void init() {
getView().setStyleList(this.styleService.findAll(new StyleFilter()));
}
@Override
public void onViewEnter() {
}
}
Und mein View
public interface TraineeView extends MvpView {
interface Presenter extends MvpViewPresenter<TraineeView> {
}
void setStyleList(List<Style> allStyles);
}
Aktuell arbeite ich an einem Anfänger Projekt um Vaadin zu lernen. Was aktuell passiert ist, dass aus einer Liste von Styles eine Tabelle erzeugt wird und wenn ich dann einen dieser Styles auswähle eine 2 auf der Seite erscheint mit den zugehörigen Items zu diesem Style. Das funktioniert! Nun ist das allerdings wie ich ahne überhaupt nicht im MVP Pattern wie es eig sein sollte bzw wie ich es haben will. Hier meine Klasse TraineeViewImpl:
@SuppressWarnings("serial")
@SpringView(
name = TraineeViewImpl.VIEW_NAME,
ui = { TraineeUI.class },
isDefault = false,
order = 30)
public class TraineeViewImpl extends AbstractMvpView<TraineeView.Presenter> implements TraineeView {
public static final String VIEW_NAME = "TRAINEE";
private static final Logger log = Logger.getLogger( TraineeView.class.getName() );
BeanItemTable<Style> tableWithAllStyles;
BeanItemTable<de.bonprix.sample.trainee.dto.Item> tableWithAllItems;
HorizontalLayout horizontalLayoutWithStyles;
HorizontalLayout horizontalLayoutWithItems;
HorizontalLayout horizontalLayoutWithStyleAndItemTable;
List<Style> listOfAllStyles;
@Override
protected void initializeUI() {
Dialog dialog = new Dialog(new Frame() , true);
horizontalLayoutWithStyles = new HorizontalLayout();
horizontalLayoutWithStyleAndItemTable = new HorizontalLayout();
horizontalLayoutWithItems = new HorizontalLayout();
tableWithAllStyles = createTableWithAllStyles();
horizontalLayoutWithStyles.addComponent(tableWithAllStyles);
horizontalLayoutWithStyles.setSizeFull();
horizontalLayoutWithItems.setSizeFull();
horizontalLayoutWithStyleAndItemTable.addComponent(horizontalLayoutWithStyles);
horizontalLayoutWithStyleAndItemTable.addComponent(horizontalLayoutWithItems);
horizontalLayoutWithStyleAndItemTable.setSizeFull();
setCompositionRoot(horizontalLayoutWithStyleAndItemTable);
}
private BeanItemTable createTableWithAllStyles() {
BeanItemTable table = new BeanItemTable(Style.class);
table.setImmediate(true);
table.setSizeFull();
table.setSelectable(true);
table.addGeneratedColumn("image", (source, itemId, columnId) -> {
final Item item = source.getItem(itemId);
final String url = (String) item.getItemProperty("assetUrl")
.getValue();
return new Embedded("", new ExternalResource(url)) {
};
});
table.setVisibleColumns("styleId","styleNo", "image");
table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
Style chosenStyle = (Style) event.getItemId();
try{
Set<de.bonprix.sample.trainee.dto.Item> items = chosenStyle.getItems();
tableWithAllItems = createItemTableForChosenStyle(items);
tableWithAllItems.setSizeFull();
horizontalLayoutWithItems.removeAllComponents();
horizontalLayoutWithItems.addComponent(tableWithAllItems);
}
catch (Exception e)
{
}
}
});
return table;
}
@Override
public void setStyleList(final List<Style> allStylesAndItems) {
listOfAllStyles = allStylesAndItems;
if (allStylesAndItems != null) {
tableWithAllStyles.addAllBeans(listOfAllStyles);
}
}
public BeanItemTable createItemTableForChosenStyle(Set<de.bonprix.sample.trainee.dto.Item> items)
{
BeanItemTable tableWithItemsBelongingToChosenStyle = new BeanItemTable(de.bonprix.sample.trainee.dto.Item.class);
Set<de.bonprix.sample.trainee.dto.Item> itemsOfChosenStyle = items;
try {
tableWithItemsBelongingToChosenStyle.addGeneratedColumn("image", (source, itemId, columnId) -> {
final Item item = source.getItem(itemId);
final String url = (String) item.getItemProperty("assetUrl").getValue();
return new Embedded("", new ExternalResource(url)) {
};
});
tableWithItemsBelongingToChosenStyle.addAllBeans(itemsOfChosenStyle);
tableWithItemsBelongingToChosenStyle.setVisibleColumns("itemId", "itemNo", "image");
}
catch(Exception e){
log.info("No Items found/ Other reasons");
}
return tableWithItemsBelongingToChosenStyle;
}
}
---
Vielleicht kann mir jemand von euch erklären was nun dort raus muss und wohin. Was genau wäre ein Model und was gehört in den Presenter. Habe mich etliche Videos angesehen, aber auf mein Beispiel verstehe ich es einfach nicht.... Bitte um eine Erklärung wenn es eine Antwort gibt :/ Will das echt begreifen.
Hier noch mein Presenter:
@SpringPresenter
public class TraineePresenter extends AbstractMvpViewPresenter<TraineeView> implements TraineeView.Presenter {
@Resource
private StyleService styleService;
@Override
public void init() {
getView().setStyleList(this.styleService.findAll(new StyleFilter()));
}
@Override
public void onViewEnter() {
}
}
Und mein View
public interface TraineeView extends MvpView {
interface Presenter extends MvpViewPresenter<TraineeView> {
}
void setStyleList(List<Style> allStyles);
}