JSF (primefaces) + p:commandButton + p:dialog - metoda zapisu danych

0

Witam,

Wartości są odczytywane (tzn. a i b) lecz podczas zapisu selectedEntry jest nullem.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<h:body>
<h:form id="form">
    <p:commandButton value="Dodaj nowy wpis" id="newEntry"
        icon="ui-icon-plus" ajax="true"
        actionListener="#{bean.createNewEntry}" update=":form:display"
        immediate="true" onsuccess="entryDialog.show()" />

    <p:dialog header="Edycja" widgetVar="entryDialog" resizable="false"
        width="400" modal="true" id="entryDialog">

        <h:panelGrid id="display" columns="2">
            <h:outputText value="Pole A:" style="text-align: right" />
            <h:inputText value="#{bean.selectedEntry.a}" id="a" />

            <h:outputText value="Pole B:" style="text-align: right" />
            <h:inputText value="#{bean.selectedEntry.b}" id="b"
                width="360" />
        </h:panelGrid>

        <h:panelGrid id="buttons" columns="1">
            <p:column style="text-align: center">
                <p:commandButton value="Zapisz" id="ajbtn" icon="ui-icon-disk"
                    actionListener="#{bean.save}" onclick="entryDialog.hide()" />
            </p:column>
        </h:panelGrid>
    </p:dialog>
</h:form>
</h:body>
</html>
@ViewScoped
@ManagedBean(name = "bean")
public class Bean implements Serializable {
  private Entry selectedEntry; // getter && setter 

  public void save(ActionEvent e) {
     //selectedEntry jest null
  }

  public void createNewEntry(ActionEvent e) {
     selectedEntry = new Entry("ala", "ala2");     
  }  
}

public class Entry implements Serializable {
  private String a; 
  private String b;
  // getters && settters

  public Entry(String a, String b) {
     this.a = a;
     this.b = b;
  }

  public Entry() {
  }
}

Wie ktoś co źle napisałem?

0

Moim błędem było nie dodanie do przykładowego kodu informacji o

<p:dataTable selection="#{bean.selectedEntry}" ..>

przez co selection w table nadpisywało mi selectedEntry.

Czy można obejść się bez tworzenia nowej zmiennej w Bean np.

private Entry newEntry;

by móc dodawać nowy wpis i wykorzystywać go w tabeli?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0