I ended up defining a custom converter for the object, which appears to be 
doing its job correctly. The problem it still does not bind the selected items 
to the list in the h:selectManyListbox's value attribute. This appears to 
happen when I use s:convertEntity (or a custom converter) in conjunction with 
a4j:support. If I remove the converter, I do get a list of Strings bound to the 
value attribute... but this doesn't really help me. What is going on here?

My xhtml:

  |             <h:selectManyListbox 
value="#{campaignSelector.selectedAdvertisers}" 
converter="genericEntityConverter">
  |                     <s:selectItems 
value="#{campaignSelector.availableAdvertisers}" var="advertiser" 
label="#{advertiser.name}" />
  |                     <a4j:support event="onchange" 
reRender="campaignSelector" />
  |             </h:selectManyListbox>
  | 

My converter:

  | //This converter can be used for entities extending ConvertibleEntity
  | @Name("genericEntityConverter")
  | @Scope(org.jboss.seam.ScopeType.APPLICATION)
  | @org.jboss.seam.annotations.faces.Converter(id="genericEntityConverter")
  | public class GenericEntityConverter implements Converter {
  | 
  |     @In
  |     private EntityManager entityManager;
  | 
  |     public Object getAsObject(FacesContext facesContext, UIComponent 
uiComponent, String entityId) throws ConverterException {
  |             String[] strings = entityId.split("@");
  |             if(strings.length == 2) {
  |                     
  |                     String tableName = strings[0];
  |                     Integer id = Integer.valueOf(strings[1]);
  |                     String query = "from " + tableName + " where id=:id";
  |                     Object entity = (Object) 
entityManager.createQuery(query).setParameter("id", id).getSingleResult();
  |                     return entity;
  |             } else {
  |                     throw new ConverterException("The converter could not 
get the object associated with the id: " + entityId);
  |             }
  |     }
  | 
  |     public String getAsString(FacesContext facesContext, UIComponent 
uiComponent, Object object) {
  |             ConvertibleEntity entity = (ConvertibleEntity) object;
  |             return entity.getEntityId();
  |     }
  |     
  | 
  | }
  | 
  | public abstract class ConvertibleEntity {
  |     public abstract String getEntityId();
  |     public abstract String getEntityName();
  | }
  | 
  | //example of ConvertibleEntity implementation
  |     @Transient
  |     public String getEntityId() {
  |             return "Advertiser@" + this.getId().toString();
  |     }
  | 
  |     @Transient
  |     public String getEntityName() {
  |             return "Advertiser";
  |     }
  | 
  | 


I have stepped through in the debugger, and the converter's getAsObject method 
is being called and getting the Object from the EM... but when I get into the 
getAvailableCampaigns method on the action bean, the selectedAdvertisers list 
is still empty... what is going on here?

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4116766
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to