带有p:selectBooleanCheckbox组件的javax.el.PropertyNotFoundException

时间:2014-02-10 15:21:09

标签: java jsf jsf-2 primefaces components

我在使用简单的primefaces组件时遇到了一些问题。我有一个p:对话框,里面有一个p:selectBooleanCheckbox:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui" 
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

<h:body>

    <ui:composition template="/templates/template_geral.xhtml">

        <ui:define name="page_content">               

            <h:form id="form"> 

                <p:dataTable resizableColumns="true" var="infoAssinaturas" value="#{mBConsulta_assinaturas.listInfoAssinaturas}" id="infoAssinaturasList" editable="true" rendered="true">  

                   <p:column headerText="Ações" style="width:3%">
                        <p:panelGrid columns="2" style=".ui-panelgrid td, .ui-panelgrid tr{border: none !important}"> 
                            <p:commandLink update=":form:infoAssinaturasEdit" oncomplete="PF('infoAssinaturas_editDialog').show()" title="Editar">  
                                <h:outputText styleClass="ui-icon ui-icon-pencil" style="margin:0 auto;" />
                                <f:setPropertyActionListener value="#{infoAssinaturas}" target="#{mBConsulta_assinaturas.selectedInfoAssinatura}" />
                            </p:commandLink> 
                        </p:panelGrid>
                    </p:column>  
                </p:dataTable>

                <p:outputPanel id="infoAssinaturasEdit" style="text-align:center;"> 
                    <p:dialog widgetVar="infoAssinaturas_editDialog" header="Editar: #{mBConsulta_assinaturas.selectedInfoAssinatura.nomeevento}" resizable="false" modal="true" appendToBody="true">
                        <h:panelGrid columns="2" style="margin-bottom:10px">  

                            <h:outputLabel value="Habilitada: *" for="habilitada" />
                            <p:selectBooleanCheckbox value="#{mBConsulta_assinaturas.selectedInfoAssinatura.habilitadaBoolean}" />

                        </h:panelGrid>
                        <p:commandButton value="Salvar" styleClass="ui-priority-primary" icon="ui-icon-disk"/> 
                        <p:commandButton value="Cancelar" styleClass="ui-priority-primary" icon="ui-icon-cancel"/> 

                    </p:dialog>
                </p:outputPanel>
            </h:form>

        </ui:define>

    </ui:composition>
</h:body>

当我运行应用程序并尝试打开页面时,我收到以下异常:javax.el.PropertyNotFoundException:Target Unreachable,'selectedInfoAssinatura'返回null。

奇怪的是,当我用p:inputTextBox替换p:selectBooleanCheckBox时,它可以很好地工作,并且没有抛出任何异常。我想念selectBooleanCheckBox组件吗?

我的MB:

public class MBConsulta_assinaturas implements Serializable {

private List<InfoAssinaturas> listInfoAssinaturas;
private InfoAssinaturasFacade infoAssinaturasFacade;
private InfoAssinaturas selectedInfoAssinatura;

public MBConsulta_assinaturas() {
    infoAssinaturasFacade = new InfoAssinaturasFacade();
    listInfoAssinaturas = new ArrayList<InfoAssinaturas>();
    listInfoAssinaturas = infoAssinaturasFacade.listAll();
}

public List<InfoAssinaturas> getListInfoAssinaturas() {
    return listInfoAssinaturas;
}

public InfoAssinaturasFacade getInfoAssinaturasFacade() {
    return infoAssinaturasFacade;
}

public void setListInfoAssinaturas(List<InfoAssinaturas> listInfoAssinaturas) {
    this.listInfoAssinaturas = listInfoAssinaturas;
}

public void setInfoAssinaturasFacade(InfoAssinaturasFacade infoAssinaturasFacade) {
    this.infoAssinaturasFacade = infoAssinaturasFacade;
}

public InfoAssinaturas getSelectedInfoAssinatura() {
    return selectedInfoAssinatura;
}

public void setSelectedInfoAssinatura(InfoAssinaturas selectedInfoAssinatura) {
    this.selectedInfoAssinatura = selectedInfoAssinatura;
}
} 

我的模特:

public class InfoAssinaturas implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nomeevento;
private short risco;
private String descricao;
private short habilitada;

public InfoAssinaturas() {
}

public InfoAssinaturas(Integer id) {
    this.id = id;
}

public InfoAssinaturas(Integer id, String nomeevento, short risco, String descricao, short habilitada) {
    this.id = id;
    this.nomeevento = nomeevento;
    this.risco = risco;
    this.descricao = descricao;
    this.habilitada = habilitada;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getNomeevento() {
    return nomeevento;
}

public void setNomeevento(String nomeevento) {
    this.nomeevento = nomeevento;
}

public short getRisco() {
    return risco;
}

public void setRisco(short risco) {
    this.risco = risco;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public short getHabilitada() {
    return habilitada;
}

public String getHabilitadaString() {
    FacesContext ctx = FacesContext.getCurrentInstance();
    Application app = ctx.getApplication();
    ResourceBundle bundle = app.getResourceBundle(ctx, "labels");
    if (this.getHabilitada() == 0) {
        return bundle.getString("NAO");
    } else {
        return bundle.getString("SIM");
    }
}

public Boolean getHabilitadaBoolean() {
    if (this.getHabilitada() == 0) {
        return false;
    } else {
       return true;
    }
}

public void setHabilitadaBoolean(Boolean habilitada) {
    if (habilitada) {
        this.setHabilitada((short) 1);
    } else {
       this.setHabilitada((short) 0);
    }
}
public void setHabilitada(short habilitada) {
    this.habilitada = habilitada;
}
}

0 个答案:

没有答案