这是我的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]}" />
使用200px值调用setAltura
方法,但未调用setChecklist(ListaChecklistWrapper checklist)
且组件内的checklist属性始终为null。
如果我在#{CheckBean.checklists[0].nome}
标记之外<checando:exibi...
运行。所以,对象不是null ...它只是对set方法的缺失调用。
我有什么遗漏吗?
Mojarra 2.1.13(20120907-1514)和java版“1.7.0_25”。
感谢。
答案 0 :(得分:1)
我想,将nome直接作为参数放入组件中会再次起作用吗? (类似于setChecklistNome(String nome)。
如果是这样,提供与java.lang.String不同的直接参数可能会遇到挑战。您是否尝试将参数设为cc.attrs.checklist
而不是直接将其写入UINamingContainer
?