From 915bfea576f6e1443872a21028fd70dd8fc89d6e Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 8 Jun 2018 23:09:02 +0200 Subject: [PATCH] =?UTF-8?q?TheCoder4eu/BootsFaces-OSP#942=20documented=20?= =?UTF-8?q?=C2=B4`=20with=20converters=20defined=20with?= =?UTF-8?q?=20an=20annotation=20like=20@FacesConverter(forClass=3DSome.cla?= =?UTF-8?q?ss)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/selectOneMenu/BeersBean.java | 41 +++++++++- .../bootsfaces/demo/selectOneMenu/Wine.java | 32 ++++++++ .../demo/selectOneMenu/WineConverter.java | 32 ++++++++ src/main/webapp/forms/converters.xhtml | 77 ++++++++++++++++--- 4 files changed, 171 insertions(+), 11 deletions(-) create mode 100644 src/main/java/net/bootsfaces/demo/selectOneMenu/Wine.java create mode 100644 src/main/java/net/bootsfaces/demo/selectOneMenu/WineConverter.java diff --git a/src/main/java/net/bootsfaces/demo/selectOneMenu/BeersBean.java b/src/main/java/net/bootsfaces/demo/selectOneMenu/BeersBean.java index 6a93229c..ccc7bed4 100644 --- a/src/main/java/net/bootsfaces/demo/selectOneMenu/BeersBean.java +++ b/src/main/java/net/bootsfaces/demo/selectOneMenu/BeersBean.java @@ -17,8 +17,14 @@ public class BeersBean implements Serializable { * */ private static final long serialVersionUID = -3192521384162408966L; + private List beers; + private List wines; + private Beer selectedBeer; private Beer selectedBeer2; + + private Wine selectedWine; + public Beer getSelectedBeer2() { return selectedBeer2; @@ -28,7 +34,6 @@ public void setSelectedBeer2(Beer selectedBeer2) { this.selectedBeer2 = selectedBeer2; } - private List beers; public BeersBean() { _init(); @@ -39,6 +44,11 @@ public void _init() { beers.add(new Beer(10, "La Chouffe")); beers.add(new Beer(20, "Stella Artois")); beers.add(new Beer(30, "Westmalle Trippel")); + + wines = new ArrayList<>(); + getWines().add(new Wine(10, "Riesling")); + getWines().add(new Wine(20, "Pinet Noir")); + getWines().add(new Wine(30, "Merlot")); } public Beer getSelectedBeer() { @@ -69,4 +79,33 @@ public Beer getBeer(Integer id) { } return null; } + + public Wine getWine(Integer id) { + if (id == null) { + throw new IllegalArgumentException("no id provided"); + } + for (Wine wine : wines) { + if (id.equals(wine.getId())) { + return wine; + } + } + return null; + } + + + public Wine getSelectedWine() { + return selectedWine; + } + + public void setSelectedWine(Wine selectedWhine) { + this.selectedWine = selectedWhine; + } + + public List getWines() { + return wines; + } + + public void setWines(List wines) { + this.wines = wines; + } } \ No newline at end of file diff --git a/src/main/java/net/bootsfaces/demo/selectOneMenu/Wine.java b/src/main/java/net/bootsfaces/demo/selectOneMenu/Wine.java new file mode 100644 index 00000000..3247c77c --- /dev/null +++ b/src/main/java/net/bootsfaces/demo/selectOneMenu/Wine.java @@ -0,0 +1,32 @@ +package net.bootsfaces.demo.selectOneMenu; + +/** + * Example taken from : https://memorynotfound.com/using-custom-converter-for-hselectonemenu/ + */ + +public class Wine { + + private Integer id; + private String brand; + + public Wine(Integer id, String brand) { + this.id = id; + this.brand = brand; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } +} \ No newline at end of file diff --git a/src/main/java/net/bootsfaces/demo/selectOneMenu/WineConverter.java b/src/main/java/net/bootsfaces/demo/selectOneMenu/WineConverter.java new file mode 100644 index 00000000..a73abd8d --- /dev/null +++ b/src/main/java/net/bootsfaces/demo/selectOneMenu/WineConverter.java @@ -0,0 +1,32 @@ +package net.bootsfaces.demo.selectOneMenu; + +import javax.el.ValueExpression; +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.convert.Converter; +import javax.faces.convert.FacesConverter; + +/** + * Example taken from : https://memorynotfound.com/using-custom-converter-for-hselectonemenu/ + */ + +@FacesConverter(forClass = Wine.class) +public class WineConverter implements Converter { + + @Override + public Object getAsObject(FacesContext ctx, UIComponent uiComponent, String wineId) { + System.out.println("getAsObject:" + wineId); + + ValueExpression vex = ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), + "#{beersBean}", BeersBean.class); + + BeersBean beers = (BeersBean) vex.getValue(ctx.getELContext()); + return beers.getWine(Integer.valueOf(wineId)); + } + + @Override + public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object wine) { + System.out.println("getAsString:" + wine); + return ((Wine) wine).getId().toString(); + } +} diff --git a/src/main/webapp/forms/converters.xhtml b/src/main/webapp/forms/converters.xhtml index bc74bc5a..3a24040c 100644 --- a/src/main/webapp/forms/converters.xhtml +++ b/src/main/webapp/forms/converters.xhtml @@ -183,6 +183,15 @@ + + + + + + + @@ -209,7 +218,14 @@ - + + + + + + ]]> @@ -245,6 +261,35 @@ public class BeerConverter implements Converter { + + + + +