2014-04-26 44 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