[jboss-user] [JBoss Seam] - converter and dropdowns

leeovan do-not-reply at jboss.com
Tue Jul 3 15:12:55 EDT 2007


hello im trying to understand converters and also their place in dropdowns..  I have seen many posts about seams new s:convertEntity but i dont want an entity.  Im thinking i want something like this.. 

a base class that all objects of the type i want to display will extend.


  | 
  | public class ReferenceData {
  | 	private String name;
  | 	private Integer id;
  | 
  | 	public ReferenceData(Integer id, String name) {
  | 		this.id = id;
  | 		this.name = name;
  | 	}
  | 
  | 	public Integer getId() {
  | 		return id;
  | 	}
  | 
  | 	public void setId(Integer id) {
  | 		this.id = id;
  | 	}
  | 
  | 	public String getName() {
  | 		return name;
  | 	}
  | 
  | 	public void setName(String name) {
  | 		this.name = name;
  | 	}
  | }
  | 
  |  

then i have a class that extends this. with nothing else in it.

i then use this to make my list of objects to display on the screen



  | public static final Vector<JobType> getMyJobTypes() {
  | 		Vector<JobType> types = new    Vector<JobType>();
  |         types.add(new JobType(new Integer(1), "hello1"));
  |         types.add(new JobType(new Integer(2), "hello2"));
  |         types.add(new JobType(new Integer(3), "hello3"));
  |         
  |         return types;
  |     }
  | 

with this 


  | <h:selectOneMenu value="#{jobManagerHome.selectedJobType}" converter="#{converters.referenceDataConverter}">
  |                         <s:selectItems 
  |                             value="#{jobManagerHome.jobDetailTypesRefData}" 
  |                             var="jt" 
  |                             label="#{jt.name}"  />          
  |              <a:support  event="onchange" />                   
  |                              
  |         </h:selectOneMenu>
  | 


this is the converter 


  | 
  | @Name("referenceDataConverter")
  | @Intercept(NEVER)
  | @Converter
  | public class ReferenceDataConverter implements javax.faces.convert.Converter {
  | 	List<ReferenceData> list;
  | 
  | 	public String getAsString(FacesContext facesContext, UIComponent component,	Object obj) {
  | 		if (obj == null)
  | 			return null;
  | 
  | 		ReferenceData referenceData = (ReferenceData) obj;
  | 		String val = String.valueOf(referenceData.getName());
  | 		return val;
  | 	}
  | 
  | 	public Object getAsObject(FacesContext facesContext, UIComponent component, String string) 
  | 	                          throws ConverterException {
  | 		if (string == null || string.length() == 0) {
  | 			return null;
  | 		}
  | 
  | 		int id = Integer.valueOf(string).intValue();
  | 		for (ReferenceData referenceData : list) {
  | 			if (referenceData.getId() == id) {
  | 				return referenceData;
  | 			}
  | 		}
  | 
  | 		return null;
  | 	}
  | 
  | }
  | 

however i get this error


  | 
  | java.lang.IllegalArgumentException: Value is no String (class=uk.co.anotion.entity.jobs.JobType, value=uk.co.anotion.entity.jobs.JobType at 5d8897) and component jobDetail:_id0with path: {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRoot,ViewId: /JobDetailEditComponent.xhtml][Class: javax.faces.component.html.HtmlForm,Id: jobDetail][Class: org.richfaces.component.html.HtmlPanel,Id: jobSelectionPanel][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id0]} does not have a Converter
  | 	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:536)
  | 	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:555)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderSelectOptions(HtmlRendererUtils.java:398)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:298)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:252)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:54)
  | 	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:536)
  | 	at org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:286)
  | 	at org.ajax4jsf.framework.renderer.RendererBase.renderChildren(RendererBase.java:262)
  | 	at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:189)
  | 	at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:184)
  | 	at org.ajax4jsf.framework.renderer.RendererBase.encodeChildren(RendererBase.java:121)
  | 	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:524)
  | 	at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:244)
  | 	at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249)
  | 	at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249)
  | 	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:573)
  | 	at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
  | 	at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:229)
  | 	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
  | 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
  | 	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
  | 
  | 


any help welcome 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4060112#4060112

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4060112



More information about the jboss-user mailing list