Java 为什么UIComponent.setStyleClass()不能在JSF 2.1转换器中工作?
如果我在JSF转换器Java 为什么UIComponent.setStyleClass()不能在JSF 2.1转换器中工作?,java,jsf-2,Java,Jsf 2,如果我在JSF转换器getAsString(…)方法中的UIComponent引用上调用setStyleClass,则不应用所述类 如果我在绑定组件(带有“binding”)上的支持bean中执行相同的操作,它将按预期工作 转换器被调用,它被正确注册 这是我的转换器: @FacesConverter(forClass = MoneyAmount.class) public class MoneyAmountConverter implements Converter { Logger l
getAsString(…)
方法中的UIComponent
引用上调用setStyleClass
,则不应用所述类
如果我在绑定组件(带有“binding”)上的支持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();
}
}
谢谢你的期待 您调试过这段代码吗?从代码来看,我想问题在于您可能不会在
htmloutplael
组件上使用转换器
此
h:outputLabel
是否通过for
属性链接到h:inputText
?在这种情况下,instanceof
可能总是返回false
,因为转换的组件将是HtmlInputText
是的,我调试了它并调用了setStyleClass。日志包括来自代码的消息。