rich:listshuttle converter problem
exxoo Sep 4, 2008 8:06 AMGreetings,
I'm having trouble getting my List Shuttle to work. I'm using it to assign certain User Groups. On first invocation i always receive a faces-error message like this:
"Component j_id_jsp_488724587_1:shuttle has invalid value expression com.tqg.lcm.manager.modules.useradmin.UserGroupVO@134831a6"
When i switch back to my shuttle site and try the same action again everything works fine, it just occurs on the first invocation. I guess the problem is related to the overwriting of the hasCode() and equals() methods. I'm not very experienced with that and I used and adjusted the methods from the ListShuttle demo. Perhaps you can help me out ? Here is my Code:
My Bean (including the hashCode() and equals() methods):
package com.tqg.lcm.manager.modules.useradmin; import java.io.Serializable; public class UserGroupVO implements Serializable { protected long id; protected String groupname; protected String comment; protected String lastuser; protected String lastupdate; /* GETTERS AND SETTERS */ public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((groupname == null) ? 0 : groupname.hashCode()); result = prime * result + ((comment == null) ? 0 : comment.hashCode()); result = prime * result + ((lastuser == null) ? 0 : lastuser.hashCode()); result = prime * result + ((lastupdate == null) ? 0 : lastupdate.hashCode()); result = prime * result + (int)id; return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UserGroupVO other = (UserGroupVO) obj; if (groupname == null) { if (other.groupname != null) return false; } else if (!groupname.equals(other.groupname)) return false; if (comment == null) { if (other.comment != null) return false; } else if (!comment.equals(other.comment)) return false; if (lastuser == null) { if (other.lastuser != null) return false; } else if (!lastuser.equals(other.lastuser)) return false; if (lastupdate == null) { if (other.lastupdate != null) return false; } else if (!lastupdate.equals(other.lastupdate)) return false; if (id != other.id) return false; return true; } }
The list shuttle jsp:
<rich:listShuttle var="item" id="shuttle" sourceListWidth="350" targetListWidth="350" listsHeight="310" converter="UserGroupConverter" orderControlsVisible="false" fastOrderControlsVisible="false" removeAllControlLabel="#{msg['shuttle.removeall']}" removeControlLabel="#{msg['shuttle.remove']}" copyAllControlLabel="#{msg['shuttle.copyall']}" copyControlLabel="#{msg['shuttle.copy']}" sourceCaptionLabel="#{msg['useradmin.usergroup.availableusergroups']}" targetCaptionLabel="#{msg['useradmin.usergroup.targetusergroups']}" sourceValue="#{userToUsergroupShuttle.sourceList}" targetValue="#{userToUsergroupShuttle.targetList}"> <h:column> <f:facet name="header"> <h:outputText value="#{msg['useradmin.usergroup']}" /> </f:facet> <h:outputText value="#{item.groupname}" /> </h:column> </rich:listShuttle>
And my converter:
package com.tqg.lcm.manager.modules.useradmin.converter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import com.tqg.lcm.manager.modules.useradmin.UserAdminService; import com.tqg.lcm.manager.modules.useradmin.UserGroupVO; public class UserGroupConverter implements Converter { UserAdminService uas = new UserAdminService(); public Object getAsObject(FacesContext ctx, UIComponent c, String value) { if (value == null) { return null; } UserGroupVO usergroup = uas.getUserGroupById(Long.parseLong(value)); return usergroup; } public String getAsString(FacesContext ctx, UIComponent c, Object value) { if (value == null) { return null; } UserGroupVO usergroup = null; try { usergroup = (UserGroupVO) value; } catch (ClassCastException e) { throw new ConverterException("Could not cast to UserGroupVO"); } String id = String.valueOf(usergroup.getId()); return id; } }
I would be grateful for any help you can provide.
Exxoo