Hello.

I have following selectOneMenu setup for edit form:

<h:selectOneMenu id="parent" value="#{CategoryBean.category.parent}" converter="CategoryConverter" >
    <f:selectItem itemLabel="--" itemValue=""/>
    <f:selectItems value="#{CategoryBean.parentCategorysAsSelectItems}" />
</h:selectOneMenu>


Where coresponding backing bean is:

public class CategoryBean {

    private Category category;
    private boolean editmode;
    public List getParentCategorysAsSelectItems() throws SQLException {
        List items = new ArrayList();
        CategoryDAO dao = SqlMapDAOFactory.getCategoryDAO();
        List cats = dao.asSortedList(category.getId());
        for (Iterator it = cats.iterator(); it.hasNext();) {
            Category cat = (Category) it.next();
            items.add(new SelectItem(cat, cat.getName(), null, false));
        }
        return items;
    }

...
}

And converter:

public class CategoryConverter implements Converter {

public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String string) throws ConverterException {
        Category cat = new Category();
        try {
            cat.setId(new Integer(string));
        } catch (NumberFormatException ex) {
            return null;
        }
        return cat;
    }

public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object object) throws ConverterException {
        if(object == null) return null;
        Category cat;
        try {
            cat = (Category) object;
        } catch (ClassCastException e) {
            return "";
        }
        return String.valueOf(cat.getId());
    }
}


And everything seem work fine except one strange bug: when i open editing page and type incorrect data into some fields, while one of
items choosen in selectOneMenu, then following Exception occurs:

2007-04-30 00:27:17 StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception javax.faces.FacesException: java.io.NotSerializableException: goroshina.domain.Category at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425) at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
...

javax.faces.FacesException: java.io.NotSerializableException: goroshina.domain.Category at org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:194) at org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:154) at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateManager.java:88) at org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.java:398) at org.apache.myfaces.taglib.core.ViewTag.doAfterBody(ViewTag.java:150) at org.apache.jsp.admin.category_005fedit_jsp._jspx_meth_f_view_0(category_005fedit_jsp.java:194)
...

Caused by: java.io.NotSerializableException: goroshina.domain.Category
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156) at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
        at java.util.ArrayList.writeObject(ArrayList.java:570)
        at sun.reflect.GeneratedMethodAccessor578.invoke(Unknown Source)
....


This excpetion does not occur if no item selected in selectOneMenu.
Strange, maybe i missed somewhere in docs that backing bean properties must be serializable.
Or maybe im using wrong setup for  "selectOneMenu" ?
Thanks.



Reply via email to