【发布时间】:2014-01-23 22:48:23
【问题描述】:
这是我的 FacesComponent 类:
@FacesComponent("ExibicaoChecklistComponent")
public class ExibicaoChecklistComponent extends UINamingContainer {
private ListaChecklistWrapper checklist;
private String altura;
public ListaChecklistWrapper getChecklist() {
return checklist;
}
public void setChecklist(ListaChecklistWrapper checklist) {
this.checklist = checklist;
}
public String getAltura() {
return altura;
}
public void setAltura(String altura) {
this.altura = altura;
}
}
和xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:pretty="http://ocpsoft.com/prettyfaces"
xmlns:ui="http://java.sun.com/jsf/facelets">
<cc:interface componentType="ExibicaoChecklistComponent">
<cc:attribute name="altura" default="300px" type="java.lang.String" />
<cc:attribute name="checklist" required="true" />
</cc:interface>
<cc:implementation>
Altura: #{cc.altura}
Checklist: #{cc.checklist.nome}
</cc:implementation>
最后是用法:
<checando:exibicaoChecklist altura="200px" checklist="#{CheckBean.checklists[0]}" />
setAltura 方法被调用,值为 200px,但 setChecklist(ListaChecklistWrapper checklist) 未被调用,并且组件内部的 checklist 属性始终为 null。
如果我在<checando:exibi... 标签之外执行#{CheckBean.checklists[0].nome},它就可以工作。所以,这个对象不是空的……它只是缺少对 set 方法的调用。
我有什么遗漏的吗?
Mojarra 2.1.13 (20120907-1514) 和 java 版本“1.7.0_25”。
谢谢。
【问题讨论】:
-
我猜,将
nome直接作为参数输入到组件中会再次起作用吗? (类似于setChecklistNome(String nome)。如果是这样,提供与java.lang.String不同的直接参数可能会遇到挑战。您是否尝试将参数提供为cc.attrs.checklist,而不是将其直接写入UINamingContainer? -
谢谢@L-Ray,将其作为答案发布,以便我检查您的解决方案是否正确。
-
赞成票也将不胜感激。 :-)