未设置调用的FacesComponent

时间:2014-01-06 13:57:49

标签: java jsf jsf-2 mojarra

这是我的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”。

感谢。

1 个答案:

答案 0 :(得分:1)

我想,将nome直接作为参数放入组件中会再次起作用吗? (类似于setChecklistNome(String nome)。

如果是这样,提供与java.lang.String不同的直接参数可能会遇到挑战。您是否尝试将参数设为cc.attrs.checklist而不是直接将其写入UINamingContainer