Problems with picklist
shadlock Oct 17, 2013 9:44 AMHi all,
i'm using Seam 2.2.2 and richfaces 3.3.1, i have a problem with picklist it's my code
import java.util.HashMap;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.convert.Converter;
import com.hp.gecpso.entity.asset.ASTCluster;
import javax.faces.context.FacesContext;
public class ClusterConverter implements Converter {
//converter uses a HashMap for switching from selectItems to your objects
private HashMap <String, ASTCluster> map;
public ClusterConverter(List<ASTCluster> objekts) {
map=new HashMap<String, ASTCluster>();
for(ASTCluster o : objekts){
map.put(Integer.toString(o.getId()), o);
}
}
public ClusterConverter() {
// TODO Auto-generated constructor stub
}
public Object getAsObject(FacesContext arg0, UIComponent arg1, String string) {
return map.get(string);
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object obj) {
if(obj instanceof ASTCluster)
return Integer.toString(((ASTCluster)obj).getId());
return null;
}
}
@In(create=true, required=false)
@Out(required=true,scope=ScopeType.PAGE)
//private List<SelectItem> leftPickList ;
private List<SelectItem> leftPickList ;
@In(create=true, required=false)
@Out(required=true,scope=ScopeType.PAGE)
private List<ASTCluster> pickListResult ;
.............
public void addRemoveCluster(){
@SuppressWarnings("static-access")
List <ASTCluster> listaCluster= DBManagedServer.getInstance().getClusterSession().getAllcluster();
pickListResult=assetSelected.getClusters();
for (Iterator<ASTCluster> iterator = listaCluster.iterator(); iterator.hasNext();) {
ASTCluster astCluster = (ASTCluster) iterator.next();
SelectItem a= new SelectItem(astCluster.getId(), astCluster.getClusterName());
leftPickList.add(a);
}
}
The page
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<a4j:outputPanel ajaxRendered="true" >
<a4j:form id="assetaddcluster" ajaxSubmit="true">
<rich:simpleTogglePanel label="Asset Search Filter" switchType="ajax" width="100%">
<h:panelGrid columns="8">
<h:outputLabel value="#{messages['clusters.nome']}" />
<h:inputText value="#{clusterFilter.nomeCluster}" />
<h:outputLabel value="#{messages['clusters.cluster']}" />
<h:selectOneMenu value="#{clusterFilter.tipoCluster}" >
<s:selectItems value="#{tipoCluster}" var="obj" label="#{obj}" itemValue="#{obj}" noSelectionLabel="Please select..." />
</h:selectOneMenu>
</h:panelGrid>
<div class="actionButtons">
<a4j:commandButton value="Search" action="#{ASTAssetController.filterCluster()}" reRender="" requestDelay="500"/>
<a4j:commandButton value="Reset" action="#{ASTAssetController.clearFilterCluster()}" reRender=""/>
</div>
</rich:simpleTogglePanel>
<rich:pickList value="#{pickListResult}" converter="#{converterAsset}">
<f:selectItems value="#{leftPickList}"/>
</rich:pickList>
<div class="actionButtons">
<a4j:commandButton value="Save" action="#{ASTAssetController.saveCluster()}" oncomplete="Richfaces.hideModalPanel('addClusterOnAsset')" reRender="">
<a4j:support event="onclick" onsubmit="if (!confirm('#{messages['sitSiteConfirmInsert']}')){return false;}" />
</a4j:commandButton>
</div>
</a4j:form>
<rich:messages id="errorChecksaddcluster" globalOnly="true" styleClass="cntError" style="font-size:12px;width:100%;"/>
</a4j:outputPanel>
</ui:composition>
I can load the value on the left side of the of the picklist but as soon as i use the search button or the save button i get an error
javax.servlet.ServletException: ValueBinding for UISelectMany must be of type List or Array
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:295)
I can't find a solution ... someone can help?