Skip to content

Commit

Permalink
TheCoder4eu/BootsFaces-OSP#942 documented ´<b:selectOneMenu>` with co…
Browse files Browse the repository at this point in the history
…nverters defined with an annotation like @FacesConverter(forClass=Some.class)
  • Loading branch information
stephanrauh committed Jun 8, 2018
1 parent 45f4aaf commit 915bfea
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 11 deletions.
41 changes: 40 additions & 1 deletion src/main/java/net/bootsfaces/demo/selectOneMenu/BeersBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,14 @@ public class BeersBean implements Serializable {
*
*/
private static final long serialVersionUID = -3192521384162408966L;
private List<Beer> beers;
private List<Wine> wines;

private Beer selectedBeer;
private Beer selectedBeer2;

private Wine selectedWine;


public Beer getSelectedBeer2() {
return selectedBeer2;
Expand All @@ -28,7 +34,6 @@ public void setSelectedBeer2(Beer selectedBeer2) {
this.selectedBeer2 = selectedBeer2;
}

private List<Beer> beers;

public BeersBean() {
_init();
Expand All @@ -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() {
Expand Down Expand Up @@ -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<Wine> getWines() {
return wines;
}

public void setWines(List<Wine> wines) {
this.wines = wines;
}
}
32 changes: 32 additions & 0 deletions src/main/java/net/bootsfaces/demo/selectOneMenu/Wine.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
32 changes: 32 additions & 0 deletions src/main/java/net/bootsfaces/demo/selectOneMenu/WineConverter.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
77 changes: 67 additions & 10 deletions src/main/webapp/forms/converters.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,15 @@
</b:selectOneMenu>
<b:inputText value="#{beersBean.selectedBeer2.id}" label="id" disabled="true"/>
<b:inputText value="#{beersBean.selectedBeer2.brand}" label="name" disabled="true"/>

<b:selectOneMenu value="#{beersBean.selectedWine}" ajax="true" process="@this" update="@after"
label="Any wine you like?">
<f:selectItems value="#{beersBean.wines}" var="wine"
itemValue="#{wine}" itemLabel="#{wine.brand}" />
</b:selectOneMenu>
<b:inputText value="#{beersBean.selectedWine.id}" label="id" disabled="true"/>
<b:inputText value="#{beersBean.selectedWine.brand}" label="name" disabled="true"/>

</b:panelGrid>
</b:form>
<f:facet name="footer">
Expand All @@ -209,7 +218,14 @@
</b:selectOneMenu>
<b:inputText value="&num;{beersBean.selectedBeer2.id}" label="id" disabled="true"/>
<b:inputText value="&num;{beersBean.selectedBeer2.brand}" label="name" disabled="true"/>
</b:panelGrid>
<b:selectOneMenu value="&num;{beersBean.selectedWine}" ajax="true" process="@this" update="@after"
label="Any wine you like?">
<f:selectItems value="&num;{beersBean.wines}" var="wine"
itemValue="&num;{wine}" itemLabel="&num;{wine.brand}" />
</b:selectOneMenu>
<b:inputText value="&num;{beersBean.selectedWine.id}" label="id" disabled="true"/>
<b:inputText value="&num;{beersBean.selectedWine.brand}" label="name" disabled="true"/>
</b:panelGrid>
</b:form>
]]>
</script>
Expand Down Expand Up @@ -245,6 +261,35 @@ public class BeerConverter implements Converter {
</script>
</b:panel>
</b:tab>
<b:tab title="Custom converter with annotation">
<b:panel>
<script type="syntaxhighlighter"
class="brush: java; toolbar: false;gutter: false; first-line: 1">
<![CDATA[
@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();
}
}
]]>
</script>
</b:panel>
</b:tab>
<b:tab title="Java Bean">
<b:panel>
<script type="syntaxhighlighter"
Expand All @@ -256,25 +301,25 @@ public class BeersBean implements Serializable {
private static final long serialVersionUID = -3192521384162408966L;
private Beer selectedBeer;
private Beer selectedBeer2;
private List<Wine> wines;
private List<Beer> beers;

public Beer getSelectedBeer2() {
return selectedBeer2;
}

public void setSelectedBeer2(Beer selectedBeer2) {
this.selectedBeer2 = selectedBeer2;
}
private Wine selectedWine;

private List<Beer> beers;
// getters and setter omitted for the sake of brevity

public BeersBean() {
beers = new ArrayList<Beer>();
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"));
}

// getters and setters omitted for the sage of brevity
public Beer getBeer(Integer id) {
if (id == null) {
throw new IllegalArgumentException("no id provided");
Expand All @@ -286,6 +331,18 @@ public class BeersBean implements Serializable {
}
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;
}
}
]]>
</script>
Expand Down

0 comments on commit 915bfea

Please sign in to comment.