Bir bean içindeki bir listeyi araya virgül koyarak göstermek ve araya virgül girilerek verilen bilgiyi liste olarak almak için aşağıdaki gibi bir converter yapılabilir.
import java.util.Arrays;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
@FacesConverter(value = "com.fibiler.jsf.converter.ListConverter")
public class ListConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
String[] values=value.split(",");
return Arrays.asList(values);
}
@Override"
public String getAsString(FacesContext context, UIComponent component, Object value) {
List<String> list=(List)value;
String joined = String.join(",", list);
return joined;
}
}
Gelen değer , ile parçalanıp listeye çevrilmekte, ters olarak da gelen liste aralarına , eklenerek birleştirilmektedir.
Aşağıdaki gibi bir bean ve xhtml ile kullanılabilir:
import java.util.ArrayList;
import java.util.List;
import javax.annotation.ManagedBean;
@ManagedBean
public class ListConverterTestBean {
private List<String> items=new ArrayList<String>();
public ListConverterTestBean() {
items.add("ITEM1");
items.add("ITEM2");
items.add("ITEM3");
}
public List<String> getItems() {
return items;
}
public void setItems(List<String> items) {
this.items = items;
}
public void submit(){
for (String string : items) {
System.out.println("item :" + string);
}
}
}
Bu bean aşağıdaki gibi kullanılabilir:
<h:form>
<h:inputText value="#{listConverterTestBean.items}"
converter="com.fibiler.jsf.converter.ListConverter"></h:inputText>
<h:commandButton action="#{listConverterTestBean.submit}"
value="Submit"></h:commandButton>
</h:form>
Görüldüğü gibi converter="com.fibiler.jsf.converter.ListConverter" ile converter verilmiştir.