2014-04-26 45 views
0

如果我在方法的UIComponent引用UIComponent引用setStyleClass方法所述的類不適用。爲什麼UIComponent.setStyleClass()在JSF 2.1轉換器中不起作用?

如果我在綁定組件(使用「綁定」)的輔助bean中執行相同的操作,它將按預期工作。

該轉換器被調用,它已正確註冊。

這裏是我的轉換器:

@FacesConverter(forClass = MoneyAmount.class) 
public class MoneyAmountConverter implements Converter { 
    Logger log = LoggerFactory.getLogger(getClass()); 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     return null;   
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     MoneyAmount amount = (MoneyAmount) value; 

     StringBuilder sb = new StringBuilder(); 
     sb.append(amount.getCurrency()); 
     sb.append(" "); 
     sb.append(amount.getAmount()); 

     if(component instanceof HtmlOutputLabel) { 
      HtmlOutputLabel lbl = (HtmlOutputLabel) component; 
      log.info("isOutputLabel for: {}", sb.toString()); 
      if(amount.isNegative()) { 
       log.info("setting style to red"); 
       lbl.setStyleClass("red"); 
      } else { 
       log.info("setting style to blue"); 
       lbl.setStyleClass("blue"); 
      }    
     } 

     return sb.toString(); 
    } 
} 

感謝您的期待!

回答

0

你調試了這段代碼嗎?從看代碼,我想問題是你可能沒有在HtmlOutputLabel組件上的轉換器。

這是h:outputLabel通過for屬性鏈接到h:inputText?在這種情況下,instanceof將可能總是返回false,因爲轉換的組件將是HtmlInputText

+0

是的,我調試它,setStyleClass被調用。該日誌包含來自代碼的消息。 – t3chris