为啥 UIComponent.setStyleClass() 在 JSF 2.1 转换器中不起作用?
Posted
技术标签:
【中文标题】为啥 UIComponent.setStyleClass() 在 JSF 2.1 转换器中不起作用?【英文标题】:Why is UIComponent.setStyleClass() not working in JSF 2.1 converters?为什么 UIComponent.setStyleClass() 在 JSF 2.1 转换器中不起作用? 【发布时间】:2014-06-12 07:30:39 【问题描述】:如果我在 JSF 转换器 getAsString(...)
方法中的 UIComponent
引用上调用 setStyleClass
,则不会应用所述类。
如果我在绑定组件(使用“绑定”)上的支持 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();
谢谢你的期待!
【问题讨论】:
【参考方案1】:您是否调试过这段代码?通过查看代码,我猜问题是您可能不会在 HtmlOutputLabel
组件上安装转换器。
此h:outputLabel
是否通过for
属性链接到h:inputText
?在这种情况下,instanceof
可能总是返回 false
,因为转换后的组件将是 HtmlInputText
。
【讨论】:
是的,我调试了它并调用了 setStyleClass。日志包含来自代码的消息。以上是关于为啥 UIComponent.setStyleClass() 在 JSF 2.1 转换器中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?