PrimeFaces Extensions has built-in converters: pe:convertJson and pe:convertGson convert values to and from JSON,
pe:convertLocale converts a locale string to a java.util.Locale and pe:sanitizer sanitizes input with an OWASP HTML policy.
JsonConverter applied to a RemoteCommand: attach pe:convertJson to pe:assignableParam. The JavaScript objects are sent as JSON and converted to a Circle bean.
JsonConverter sets a value from a URL request parameter into a bean with f:viewParam and pe:convertJson. Use RequestParameterBuilder to build URL parameters in JSON representation. This pre-initializes forms with default values passed in the URL on the initial page load (GET request).
The demo covers primitives, arrays, simple types, java.util.Date, parametrized collections and maps, and generic and non generic classes. Click "Open Link" there to see the URL parameters set into the bean. URLs longer than 2083 characters may not work in old browsers.
The LocaleConverter (pe:convertLocale) converts a locale string (for example de_DE) to a java.util.Locale object and back.
The SanitizingConverter (pe:sanitizer) sanitizes any input using an OWASP Java HTML Sanitizer PolicyFactory. It is useful for cleansing input that is displayed in an h:outputText with escape="false".
pe:convertJson has one optional attribute type which specifies the data type of the value object.
Any primitive type, array, non generic or generic type is supported. The data type is sometimes required to convert a value to or from its JSON representation.
All data types should be fully qualified. Examples:
booleanintlong[]java.lang.Stringjava.util.Datejava.util.Collection<java.lang.Integer>java.util.Map<java.lang.String, com.prime.FooPair<java.lang.Integer, java.util.Date>>com.prime.FooNonGenericClasscom.prime.FooGenericClass<java.lang.String, java.lang.Integer>com.prime.FooGenericClass<int[], com.prime.FooGenericClass<com.prime.FooNonGenericClass, java.lang.Boolean>>The tag documentation shows convertJson, convertLocale, sanitizer and convertGson (the Gson based alternative to convertJson); sanitizerLenient is the lenient variant of sanitizer.
<div class="card">
<h5>JsonConverter with pe:remoteCommand</h5>
<p>JsonConverter applied to a RemoteCommand: attach <code>pe:convertJson</code> to <code>pe:assignableParam</code>. The JavaScript objects are sent as JSON and converted to a <code>Circle</code> bean.</p>
<h:form id="formJsonRemoteCommand">
<p:growl id="growl" showDetail="true"/>
<pe:remoteCommand id="applyDataCommand" name="applyData" process="@this" update="subject date circle growl"
actionListener="#{remoteCommandController.parametersAssigned}">
<pe:assignableParam name="subject" assignTo="#{remoteCommandController.subject}"/>
<pe:assignableParam name="date" assignTo="#{remoteCommandController.date}">
<f:convertDateTime type="both" pattern="MM/dd/yyyy HH:mm:ss"/>
</pe:assignableParam>
<pe:assignableParam name="circle" assignTo="#{remoteCommandController.circle}">
<pe:convertJson/>
</pe:assignableParam>
</pe:remoteCommand>
<h:outputLabel for="subject" value="Subject: "/>
<h:outputText id="subject" value="#{remoteCommandController.subject}"/>
<br/>
<h:outputLabel for="date" value="Date: "/>
<h:outputText id="date" value="#{remoteCommandController.date}"/>
<br/>
<h:outputLabel for="circle" value="Circle: "/>
<h:outputText id="circle"
value="#{remoteCommandController.circle.radius} - #{remoteCommandController.circle.backgroundColor} - #{remoteCommandController.circle.borderColor} - #{remoteCommandController.circle.scaleFactor}"/>
<br/><br/>
<p:commandButton value="Apply Data" type="button" onclick="applyData('hello world', '05/14/2007 12:55:42', JSON.stringify(circle))"/>
<p:commandButton value="Apply Second Data" type="button" onclick="applyData('hello user', '07/11/2001 11:55:42', JSON.stringify(circle2))"/>
</h:form>
<script>
circle = {
radius: 50,
backgroundColor: "#FF0000",
borderColor: "#DDDDDD",
scaleFactor: 1.2
};
circle2 = {
radius: 32,
backgroundColor: "#FF0320",
borderColor: "#DDFFFD",
scaleFactor: 1.6
};
</script>
</div>
<div class="card">
<h5>JsonConverter with f:viewParam and URL parameters</h5>
<p>JsonConverter sets a value from a URL request parameter into a bean with <code>f:viewParam</code> and <code>pe:convertJson</code>. Use <code>RequestParameterBuilder</code> to build URL parameters in JSON representation. This pre-initializes forms with default values passed in the URL on the initial page load (GET request).
The demo covers primitives, arrays, simple types, <code>java.util.Date</code>, parametrized collections and maps, and generic and non generic classes. Click "Open Link" there to see the URL parameters set into the bean. URLs longer than 2083 characters may not work in old browsers.</p>
<p:linkButton value="Show JsonConverter with f:viewParam" icon="pi pi-external-link" target="_blank"
href="#{request.contextPath}/ui/input/converters/standalone/viewParam"/>
</div>
<div class="card">
<h5>LocaleConverter</h5>
<p>The LocaleConverter (<code>pe:convertLocale</code>) converts a locale string (for example <code>de_DE</code>) to a <code>java.util.Locale</code> object and back.</p>
<h:form id="formLocaleConverter">
<p:messages id="messages"/>
Enter a new locale here (a valid locale is for example de_DE):<br/>
<p:inputText id="enteredLocale" value="#{localeController.enteredLocale}" required="true">
<pe:convertLocale/>
</p:inputText>
<h:panelGroup layout="block" style="margin-top: 10px;margin-bottom: 10px;">
<p:commandButton value="Add" action="#{localeController.add}" update="messages addedLocales enteredLocale"/>
</h:panelGroup>
Available locales:<br/>
<h:selectManyListbox id="addedLocales" value="#{localeController.selectedLocales}" style="width: 200px;">
<pe:convertLocale/>
<f:selectItems value="#{localeController.addedLocales}"/>
</h:selectManyListbox>
</h:form>
</div>
<div class="card">
<h5>SanitizingConverter</h5>
<p>The SanitizingConverter (<code>pe:sanitizer</code>) sanitizes any input using an OWASP Java HTML Sanitizer <code>PolicyFactory</code>. It is useful for cleansing input that is displayed in an <code>h:outputText</code> with <code>escape="false"</code>.</p>
<h:form id="formSanitizingConverter">
<p:messages id="messages"/>
<h:panelGroup id="timePickerGroup" layout="block">
<p>
Enter text including HTML tags to see the default policy:
<p:inputText id="defaultSanitizer" value="#{sanitizingController.defaultSanitizer}">
<pe:sanitizer/>
</p:inputText>
</p>
<p>
Custom policy allows HTML tags including <i> and <strong>:
<p:inputText id="customSanitizer" value="#{sanitizingController.customSanitizer}">
<pe:sanitizer decodeHtml="true" policy="#{sanitizingController.policyFactory}"/>
</p:inputText>
</p>
<p>
Lenient converter allows <i> and <strong>:
<h:outputText id="lenientSanitizer" escape="false" converter="primefaces.SanitizingLenientConverter" value="#{sanitizingController.customSanitizer}"/>
</p>
</h:panelGroup>
<h:panelGroup layout="block" style="margin-top: 10px;margin-bottom: 10px;">
<p:commandButton value="Submit" update="messages defaultSanitizer customSanitizer lenientSanitizer"/>
</h:panelGroup>
</h:form>
</div>
package org.primefaces.extensions.showcase.controller;
import java.util.Date;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
import org.primefaces.extensions.showcase.model.Circle;
/**
* RemoteCommandController
*
* @author Thomas Andraschko / last modified by $Author: $
* @version $Revision: 1.0 $
*/
@Named
@RequestScoped
public class RemoteCommandController {
private String subject;
private Date date;
private Circle circle;
public void printMethodParams(final String subject, final Date date, final Circle circle) {
final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "ActionListener called", "Subject: "
+ subject + ", Date: " + date + ", Circle - backgroundColor: " + circle.getBackgroundColor());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void parametersAssigned() {
final FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "ActionListener called",
"Parameters assigned");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public String getSubject() {
return subject;
}
public void setSubject(final String subject) {
this.subject = subject;
}
public Date getDate() {
return date;
}
public void setDate(final Date date) {
this.date = date;
}
public Circle getCircle() {
return circle;
}
public void setCircle(final Circle circle) {
this.circle = circle;
}
}
package org.primefaces.extensions.showcase.model;
import java.io.Serial;
import java.io.Serializable;
/**
* Circle
*
* @author Thomas Andraschko / last modified by $Author: $
* @version $Revision: 1.0 $
*/
public class Circle implements Serializable {
@Serial
private static final long serialVersionUID = 20111020L;
private int radius;
private String backgroundColor;
private String borderColor;
private double scaleFactor;
public final int getRadius() {
return radius;
}
public final void setRadius(int radius) {
this.radius = radius;
}
public final String getBackgroundColor() {
return backgroundColor;
}
public final void setBackgroundColor(String backgroundColor) {
this.backgroundColor = backgroundColor;
}
public final String getBorderColor() {
return borderColor;
}
public final void setBorderColor(String borderColor) {
this.borderColor = borderColor;
}
public final double getScaleFactor() {
return scaleFactor;
}
public final void setScaleFactor(double scaleFactor) {
this.scaleFactor = scaleFactor;
}
}
package org.primefaces.extensions.showcase.controller;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Named;
@Named
@ViewScoped
public class LocaleController implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private List<Locale> selectedLocales;
private Locale enteredLocale;
private List<Locale> addedLocales;
public LocaleController() {
addedLocales = new ArrayList<>();
addedLocales.add(Locale.GERMANY);
addedLocales.add(Locale.ITALIAN);
addedLocales.add(Locale.KOREA);
}
public void add() {
addedLocales.add(enteredLocale);
}
public Locale getEnteredLocale() {
return enteredLocale;
}
public void setEnteredLocale(final Locale enteredLocale) {
this.enteredLocale = enteredLocale;
}
public List<Locale> getAddedLocales() {
return addedLocales;
}
public void setAddedLocales(final List<Locale> addedLocales) {
this.addedLocales = addedLocales;
}
public List<Locale> getSelectedLocales() {
return selectedLocales;
}
public void setSelectedLocales(final List<Locale> selectedLocales) {
this.selectedLocales = selectedLocales;
}
}
package org.primefaces.extensions.showcase.controller;
import java.io.Serial;
import java.io.Serializable;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Named;
import org.owasp.html.HtmlPolicyBuilder;
import org.owasp.html.PolicyFactory;
@Named
@ViewScoped
public class SanitizingController implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private String defaultSanitizer = "<p>Test</p>";
private String customSanitizer = "<p><i>Italic</i></p>";
/**
* PolicyFactory to allow certain HTML elements like italic and bold tags.
*
* @return the {@code PolicyFactory}
*/
public PolicyFactory getPolicyFactory() {
final String[] allowElements = new String[] {"b", "em", "i", "s", "strong", "sub", "sup", "u"};
return new HtmlPolicyBuilder()
.allowElements(allowElements)
.allowTextIn(allowElements)
.toFactory();
}
public String getDefaultSanitizer() {
return defaultSanitizer;
}
public void setDefaultSanitizer(String defaultSanitizer) {
this.defaultSanitizer = defaultSanitizer;
}
public String getCustomSanitizer() {
return customSanitizer;
}
public void setCustomSanitizer(String customSanitizer) {
this.customSanitizer = customSanitizer;
}
}
<f:metadata>
<f:viewParam name="b" value="#{viewParamJsonController.b}"/>
<f:viewParam name="l" value="#{viewParamJsonController.l}"/>
<f:viewParam name="ints" value="#{viewParamJsonController.ints}">
<pe:convertJson type="int[]"/>
</f:viewParam>
<f:viewParam name="chars" value="#{viewParamJsonController.chars}">
<pe:convertJson type="char[]"/>
</f:viewParam>
<f:viewParam name="s" value="#{viewParamJsonController.s}">
<pe:convertJson type="java.lang.String"/>
</f:viewParam>
<f:viewParam name="i" value="#{viewParamJsonController.i}"/>
<f:viewParam name="d" value="#{viewParamJsonController.d}">
<pe:convertJson type="java.util.Date"/>
</f:viewParam>
<f:viewParam name="list" value="#{viewParamJsonController.list}">
<pe:convertJson type="#{typesJsonController.typeGenericList}"/>
</f:viewParam>
<f:viewParam name="map" value="#{viewParamJsonController.map}">
<pe:convertJson type="#{typesJsonController.typeGenericMap}"/>
</f:viewParam>
<f:viewParam name="fooNonGeneric" value="#{viewParamJsonController.fooNonGeneric}">
<pe:convertJson type="org.primefaces.extensions.showcase.model.jsonconverter.FooNonGeneric"/>
</f:viewParam>
<f:viewParam name="fooGenericSimple" value="#{viewParamJsonController.fooGenericSimple}">
<pe:convertJson type="#{typesJsonController.typeGenericSimple}"/>
</f:viewParam>
<f:viewParam name="fooGenericComplex" value="#{viewParamJsonController.fooGenericComplex}">
<pe:convertJson type="#{typesJsonController.typeGenericComplex}"/>
</f:viewParam>
</f:metadata>
<style>
table .formColumn {
padding-right: 10px;
text-align: right;
white-space: nowrap;
width: 1%;
}
.bold {
font-weight: bold;
}
</style>
<div style="padding: 1rem;">
<h:form id="formViewParam">
<h:panelGrid columns="2" columnClasses="formColumn" style="margin-bottom:15px;">
<h:outputText value="boolean" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.b}"/>
<h:outputText value="long" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.l}"/>
<h:outputText value="int[]" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.prettyInts}"/>
<h:outputText value="char[]" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.prettyChars}"/>
<h:outputText value="String" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.s}"/>
<h:outputText value="Integer" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.i}"/>
<h:outputText value="Date" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.d}"/>
<h:outputText value="Generic List" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.list}"/>
<h:outputText value="Generic Map" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.map}"/>
<h:outputText value="Non Generic" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.fooNonGeneric}"/>
<h:outputText value="Generic Simple" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.fooGenericSimple}"/>
<h:outputText value="Generic Complex" styleClass="bold"/>
<h:outputText value="#{viewParamJsonController.fooGenericComplex}"/>
</h:panelGrid>
<p:inputText id="inputUrl" value="#{viewParamJsonController.generatedUrl}" style="width:100%"/>
<p:commandButton value="Open Link" type="button" style="margin-top:15px;"
onclick="openLinkInPopup()"/>
</h:form>
<script>
function openLinkInPopup() {
var inputValue = $(PrimeFaces.escapeClientId('formViewParam:inputUrl')).val();
if (inputValue !== null) {
window.open(inputValue, 'Test JsonConverter with URL parameters',
'width=auto,height=auto,resizable=yes,scrollbars=yes,toolbar=yes,menubar=yes,location=yes');
}
}
</script>
</div>
package org.primefaces.extensions.showcase.controller.jsonconverter;
import java.io.Serial;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import jakarta.annotation.PostConstruct;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.primefaces.extensions.showcase.model.jsonconverter.FooGeneric;
import org.primefaces.extensions.showcase.model.jsonconverter.FooNonGeneric;
import org.primefaces.extensions.util.RequestParameterBuilder;
/**
* ViewParamJsonController
*
* @author Oleg Varaksin / last modified by $Author: $
* @version $Revision: 1.0 $
*/
@Named
@ViewScoped
public class ViewParamJsonController implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Inject
private TypesJsonController typesJsonController;
private boolean b;
private long l;
private int[] ints;
private char[] chars;
private String s;
private Integer i;
private Date d;
private Collection<Integer> list = new ArrayList<Integer>();
private Map<String, ImmutablePair<Integer, Date>> map = new HashMap<String, ImmutablePair<Integer, Date>>();
private FooNonGeneric fooNonGeneric = new FooNonGeneric();
private FooGeneric<String, Integer> fooGenericSimple = new FooGeneric<String, Integer>();
private FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>> fooGenericComplex = new FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>>();
private String generatedUrl;
@PostConstruct
protected void initialize() {
// creates a builder instance by the current request URL
final RequestParameterBuilder rpBuilder = new RequestParameterBuilder(true);
try {
rpBuilder.param("b", true);
rpBuilder.param("l", 5000L);
rpBuilder.paramJson("ints", new int[] {1, 2, 3, 4, 5});
rpBuilder.paramJson("chars", new char[] {'x', 'y', 'z'});
rpBuilder.paramJson("s", "Hallo World");
rpBuilder.param("i", 99);
rpBuilder.paramJson("d", new Date());
final Collection<Integer> list = new ArrayList<Integer>();
list.add(11);
list.add(22);
list.add(33);
rpBuilder.paramJson("list", list, typesJsonController.getTypeGenericList());
final Map<String, ImmutablePair<Integer, Date>> map = new HashMap<String, ImmutablePair<Integer, Date>>();
GregorianCalendar calendar = new GregorianCalendar(2012, 1, 20);
map.put("cat", new ImmutablePair<Integer, Date>(1, calendar.getTime()));
calendar = new GregorianCalendar(2011, 6, 1);
map.put("dog", new ImmutablePair<Integer, Date>(2, calendar.getTime()));
calendar = new GregorianCalendar(1999, 10, 15);
map.put("unknow", new ImmutablePair<Integer, Date>(3, calendar.getTime()));
rpBuilder.paramJson("map", map, typesJsonController.getTypeGenericMap());
final FooNonGeneric fooNonGeneric = new FooNonGeneric();
fooNonGeneric.setCount(1001);
fooNonGeneric.setStartDate(new Date());
fooNonGeneric.setEndDate(new Date(fooNonGeneric.getStartDate().getTime() + 360000));
fooNonGeneric.addMessage("Message string 1");
fooNonGeneric.addMessage("Message string 2");
rpBuilder.paramJson("fooNonGeneric", fooNonGeneric);
final FooGeneric<String, Integer> fooGenericSimple = new FooGeneric<String, Integer>();
fooGenericSimple.setA("test");
fooGenericSimple.setB(25);
rpBuilder.paramJson("fooGenericSimple", fooGenericSimple, typesJsonController.getTypeGenericSimple());
final FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>> fooGenericComplex = new FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>>();
final FooNonGeneric fooNonGeneric2 = new FooNonGeneric();
fooNonGeneric2.setCount(909);
fooNonGeneric2.setStartDate(new Date());
fooNonGeneric2.setEndDate(new Date(fooNonGeneric.getStartDate().getTime() + 7200000));
fooNonGeneric2.addMessage("Message string 11");
fooNonGeneric2.addMessage("Message string 22");
final FooGeneric<FooNonGeneric, Boolean> fooGenericInnner = new FooGeneric<FooNonGeneric, Boolean>();
fooGenericInnner.setA(fooNonGeneric2);
fooGenericInnner.setB(false);
final int[] ints = {11, 22};
fooGenericComplex.setA(ints);
fooGenericComplex.setB(fooGenericInnner);
rpBuilder.paramJson("fooGenericComplex", fooGenericComplex, typesJsonController.getTypeGenericComplex());
}
catch (final UnsupportedEncodingException e) {
// handle exception ...
}
// build URL
generatedUrl = rpBuilder.build();
}
public String getGeneratedUrl() {
return generatedUrl;
}
public boolean isB() {
return b;
}
public void setB(final boolean b) {
this.b = b;
}
public long getL() {
return l;
}
public void setL(final long l) {
this.l = l;
}
public int[] getInts() {
return ints;
}
public String getPrettyInts() {
return Arrays.toString(ints);
}
public void setInts(final int[] ints) {
this.ints = ints;
}
public char[] getChars() {
return chars;
}
public String getPrettyChars() {
return Arrays.toString(chars);
}
public void setChars(final char[] chars) {
this.chars = chars;
}
public String getS() {
return s;
}
public void setS(final String s) {
this.s = s;
}
public Integer getI() {
return i;
}
public void setI(final Integer i) {
this.i = i;
}
public Date getD() {
return d;
}
public void setD(final Date d) {
this.d = d;
}
public Collection<Integer> getList() {
return list;
}
public void setList(final Collection<Integer> list) {
this.list = list;
}
public Map<String, ImmutablePair<Integer, Date>> getMap() {
return map;
}
public void setMap(final Map<String, ImmutablePair<Integer, Date>> map) {
this.map = map;
}
public FooNonGeneric getFooNonGeneric() {
return fooNonGeneric;
}
public void setFooNonGeneric(final FooNonGeneric fooNonGeneric) {
this.fooNonGeneric = fooNonGeneric;
}
public FooGeneric<String, Integer> getFooGenericSimple() {
return fooGenericSimple;
}
public void setFooGenericSimple(final FooGeneric<String, Integer> fooGenericSimple) {
this.fooGenericSimple = fooGenericSimple;
}
public FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>> getFooGenericComplex() {
return fooGenericComplex;
}
public void setFooGenericComplex(final FooGeneric<int[], FooGeneric<FooNonGeneric, Boolean>> fooGenericComplex) {
this.fooGenericComplex = fooGenericComplex;
}
public TypesJsonController getTypesJsonController() {
return typesJsonController;
}
public void setTypesJsonController(final TypesJsonController typesJsonController) {
this.typesJsonController = typesJsonController;
}
}
package org.primefaces.extensions.showcase.controller.jsonconverter;
import java.io.Serial;
import java.io.Serializable;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;
/**
* TypesJsonController
*
* @author Oleg Varaksin / last modified by $Author: $
* @version $Revision: 1.0 $
*/
@Named
@SessionScoped
public class TypesJsonController implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
public String getTypeGenericList() {
return "java.util.Collection<java.lang.Integer>";
}
public String getTypeGenericMap() {
return "java.util.Map<java.lang.String, org.apache.commons.lang3.tuple.ImmutablePair<java.lang.Integer, java.util.Date>>";
}
public String getTypeGenericSimple() {
return "org.primefaces.extensions.showcase.model.jsonconverter.FooGeneric<java.lang.String, java.lang.Integer>";
}
public String getTypeGenericComplex() {
return "org.primefaces.extensions.showcase.model.jsonconverter.FooGeneric"
+ "<int[], org.primefaces.extensions.showcase.model.jsonconverter.FooGeneric"
+ "<org.primefaces.extensions.showcase.model.jsonconverter.FooNonGeneric, java.lang.Boolean>>";
}
}
package org.primefaces.extensions.showcase.model.jsonconverter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* FooNonGeneric
*
* @author Oleg Varaksin / last modified by $Author: $
* @version $Revision: 1.0 $
*/
public class FooNonGeneric {
private int count;
private Date startDate;
private Date endDate;
private List<String> messages = new ArrayList<String>();
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public List<String> getMessages() {
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}
public void addMessage(String message) {
messages.add(message);
}
@Override
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public String toString() {
ReflectionToStringBuilder.setDefaultStyle(ToStringStyle.SHORT_PREFIX_STYLE);
return ReflectionToStringBuilder.toString(this);
}
}