0

I'm having some problems with a simple primefaces component. I have a p:dialog with a p:selectBooleanCheckbox inside:

<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>

When I run the application and try to open the page I get the following exception: javax.el.PropertyNotFoundException: Target Unreachable, 'selectedInfoAssinatura' returned null.

The weird thing is, when I replace the p:selectBooleanCheckBox by an p:inputTextBox it works perfectly and no one exception is throw. I miss something with the selectBooleanCheckBox component?

My 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;
}
} 

My model:

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;
}
}
  • Check if `selectedInfoAssinatura`'s setter method is being called in both cases. You've got some not related snippets in your posted code, like the `ui:include` parts. Removing them all will help with a better understanding of the issue. – Xtreme Biker Feb 10 '14 at 16:03
  • Hi, I edit the code, removing the not importants parts os the code. And yes, I call the setter method in both cases through `` – vinicius.olifer Feb 10 '14 at 17:29
  • 1
    @vinicius.olifer - what's the scope of `MBConsulta_assinaturas` – kolossus Feb 18 '14 at 14:58
  • Indeed, a request scoped bean will have this side effect. For this construct, it must be view scoped. – BalusC Jun 02 '15 at 20:34

0 Answers0