Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么UIComponent.setStyleClass()不能在JSF 2.1转换器中工作?_Java_Jsf 2 - Fatal编程技术网

Java 为什么UIComponent.setStyleClass()不能在JSF 2.1转换器中工作?

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

如果我在JSF转换器
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。日志包括来自代码的消息。