9 Replies Latest reply on Jan 30, 2008 7:13 AM by archana m

    getAsObject not being called - why?

    John McClain Newbie

      here is the converter:

      @Name("tst")
      @Scope(ScopeType.APPLICATION)
      @org.jboss.seam.annotations.faces.Converter(id="tst")
      public class Tst implements Converter {
      
       public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
       int i = 0;
       return (arg2 == null || arg2.equals("") || arg2.equals("0") || arg2.equals("false") ? new BigDecimal(0) : new BigDecimal(1));
       }
      
       public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
       if (arg2 instanceof Boolean)
       {
       return (arg2 == null || ((Boolean)arg2).equals(false) ? "N" : "Y");
       }
       else
       return (arg2 == null || ((BigDecimal)arg2).intValue() == 0 ? "false" : "true");
       }
      
      }


      Here is the xhtml:
      <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:s="http://jboss.com/products/seam/taglib"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.ajax4jsf.org/rich">
      
      <link
       href="stylesheet/fraud.css"
       rel="stylesheet"
       type="text/css" />
      <h:messages
       globalOnly="true"
       styleClass="message"
       id="globalMessages" />
      <h:form id="caseDetailForm">
       <br />
      .
      .
      <td class="data">
       <h:selectBooleanCheckbox
       id="hotTask"
       value="#{selectedCase.basedonhottask}"
       converter="tst">
       </h:selectBooleanCheckbox>
       </td>
      

      In my backing bean, the field basedonhottask is a BigDecimal and my converter should convert it to and from Boolean to BigDecimal.

      The proble is that upon render, it calls getAsString to convert from BigDecmal to the strings "false" or "true" depending on whether BigDecimal is 0 or 1 - and that seems to work fine - the checkbox is populated correctly. BUT, after changing the checkbox, on submit, it NEVER calls getAsObject - it calls getAsString again - dont know why??? Shouldnt it calls getAsObject to convert the BooleanCheckbos back into a BigDecimal?
      If this is a bug, is there a workaround?