-
1. Re: Problem with s:selectItems
flashguru Mar 10, 2007 12:17 PM (in response to jquery)Curious, why do you have setCountries() accepting a list of Country while getCountries() is returning a list of SelectItem?
Anyway, in your code, you are creating instances of SelectItem yourself. If this is what you want, then use the standard JSF <f:selectItems> instead. However, you lose two things by doing that:
1- Because you will not be using Seam JSF <s:selectItems>, you can not take advantage of the convenient noSelectionLabel attribute.
2- Your code is now tied to a SelectItem class.
Let?s assume that you have a class called Country. Then, to use Seam JSF <s:selectItems>, simply return a list of Country and do not wrap them with SelectItem. Also, make sure that the value binding for the <h:selectOneMenu> resolves to a type Country and not String. -
2. Re: Problem with s:selectItems
flashguru Mar 10, 2007 1:47 PM (in response to jquery)You will also need a converter. If you want to see how it is done, have a look at the ui example that comes with seam. You will find the example under :
jboss-seam-1.2.0.PATCH1\examples\ui -
3. Re: Problem with s:selectItems
jquery Mar 10, 2007 2:13 PM (in response to jquery)Actually the difference between parameters in set and get methods appeared because I was trying different combination of collections.
It was my mistake.
Now as you said the I have following code:@Name("personHome") public class PersonHome extends EntityHome<Person> { public List<Country> countries = new ArrayList<Country>(); public long countryId = 1; public long getCountryId() { return countryId; } public void setCountryId(long countryId) { this.countryId = countryId; } public void setCountries(List<Country> countries) { } public List<Country> getCountries(){ Country country = new Country(); country.setId(1); country.setName("Poland"); countries.add(country); return countries; } }
And xhtml:<h:selectOneMenu value="#{personHome.countryId}" converter="#{countryConverter.converter}"> <s:selectItems value="#{personHome.countries}" var="country" label="#{country.name}" /> </h:selectOneMenu>
And a converter which is based on ui seam example:@Name("countryConverter") public class CountryConverter { Converter getConverter(){ return new Converter(){ @Transactional public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException { if (arg2 == null) { return null; } try { return ((EntityManager) Component.getInstance("entityManager")).find(Country.class, Integer.valueOf(arg2)); } catch (NumberFormatException e) { throw new ConverterException("Cannot find selected country", e); } } @Transactional public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException { if (arg2 instanceof Country) { Country country = (Country) arg2; return (new Long(country.getId())).toString(); } else { return null; } } }; } }
But I still get error:Value is no String (class=java.lang.Long, value=1) and component person:_id38with path: {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRoot,ViewId: /specialist/spec_registration.xhtml][Class: javax.faces.component.html.HtmlForm,Id: person][Class: org.jboss.seam.ui.UIValidateAll,Id: _id7][Class: org.jboss.seam.ui.UIDecorate,Id: _id37][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id38]} does not have a Converter
I don't know where the error comes from and why the converter is not visible.
I would apprecite any suggestions.
jquery -
4. Re: Problem with s:selectItems
pmuir Mar 10, 2007 2:18 PM (in response to jquery)Get Seam from CVS and use s:convertEntity - check out the ui example.
Btw - you want the value attribute of the select and the value attribute of selectItems to be of type Foo and List respectively - don't make the value point at an Id, a String etc. -
5. Re: Problem with s:selectItems
jquery Mar 10, 2007 3:40 PM (in response to jquery)I've got Seam from CVS then changed xhtml to:
<h:selectOneMenu value="#{personHome.countryId}" > <s:selectItems value="#{personHome.countries}" var="country" label="#{country.name}" /> <s:convertEntity/> </h:selectOneMenu>
And then I got NPEjava.lang.NullPointerException at org.jboss.seam.ui.EntityConverter.getIdFromEntity(EntityConverter.java:116) at org.jboss.seam.ui.EntityConverter.getAsString(EntityConverter.java:171) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:544) at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(HtmlRendererUtils.java:321) at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:296) 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.jboss.seam.ui.JSF.renderChild(JSF.java:179) at org.jboss.seam.ui.JSF.renderChildren(JSF.java:162) at org.jboss.seam.ui.UIDecorate.encodeChildren(UIDecorate.java:178) 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.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:249) at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:573) at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:101) at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:221) 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.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60) at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57) at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79) at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:75) at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:213) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:595)
And why is there NPE connected with getting entity id although I set it on 1 (in code above)?
Thanks for any suggestions. -
6. Re: Problem with s:selectItems
pmuir Mar 10, 2007 3:46 PM (in response to jquery)"jquery@interia.pl" wrote:
<h:selectOneMenu value="#{personHome.countryId}" > <s:selectItems value="#{personHome.countries}" var="country" label="#{country.name}" /> <s:convertEntity/> </h:selectOneMenu>
Yup, thats rightAnd why is there NPE connected with getting entity id although I set it on 1 (in code above)?
Oops, fixed in CVS, sorry about that -
7. Re: Problem with s:selectItems
jquery Mar 10, 2007 4:36 PM (in response to jquery)Thanks a lot, now <s:selectItems> seams to appear on my xhtml page :)
jquery