2010-08-22 4 views
0

Je commence à coder un petit livre de cuisine. Par conséquent, j'ai créé une page pour ajouter quelques menusteps, un menustep devrait décrire comment faire cuire le menu étape par étape. J'ai une datatable contenant une liste de MenuSteps. L'utilisateur peut cliquer sur un lien de commande pour ajouter/supprimer une nouvelle étape. Le Bean ajoute ou supprime un MenuStep de la liste et redirige le datatable avec ajax. Cela fonctionne très bien, sauf que j'ai perdu toutes les données données aux deux champs inputText pour les étapes. Ils sont tous vides après l'ajout ou la suppression d'une ligne de mes données.Perdre des données lors de l'édition de données modifiables (JSF2)

J'espère que quelqu'un peut m'aider. Ci-dessous vous pouvez voir mon code. Faites-moi savoir si vous avez besoin de plus d'informations!

Cordialement, Benjamin

Voici mon XHTML (c'est une partie d'un modèle):

<?xml version="1.0" encoding="UTF-8"?> 

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:util="http://java.sun.com/jsf/composite/components/util" 
       xmlns:f="http://java.sun.com/jsf/core"> 
    <h:form id="form"> 

     <h:dataTable id="menuStepTable" styleClass="longTable" value="#{MenuCreation.menuSteps}" var="step"> 
      <h:column> 
       <h:panelGrid columns="2" styleClass="longTable" columnClasses="profileColumn1,profileColumn2"> 
        <h:outputLabel for="inputStepName" value="Name:"/> 
        <h:inputText id="inputStepName" value="#{step.stepName}"/> 

        <h:outputLabel for="inputTask" value="Beschreibung:"/> 
        <h:inputText id="inputTask" value="#{step.task}"/> 

        <h:commandLink styleClass="safe" value="Schritt entfernen" action="#{MenuCreation.removeMenuStepRow(step)}"> 
         <f:ajax execute="@this" render="@form"/> 
        </h:commandLink> 
       </h:panelGrid> 
       <hr /> 
      </h:column> 
     </h:dataTable> 

     <h:commandLink styleClass="safe" value="Schritt hinzufügen" action="#{MenuCreation.addMenuStepRow}"> 
      <f:ajax execute="@this" render="@form"/> 
     </h:commandLink> 
    </h:form> 
</ui:composition> 

Voici mon ManagedBean:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package de.charite.ne.server.admin.menue; 

import de.charite.ne.server.persistence.menu.MenuStep; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

/** 
* 
* @author benjamin 
*/ 
@ManagedBean(name = "MenuCreation") 
@SessionScoped 
public class MenuCreationBean implements Serializable{ 
    private List<MenuStep> menuSteps = new ArrayList<MenuStep>(); 

    @PostConstruct 
    public void init() { 
     MenuStep menuStep = new MenuStep(); 
     menuStep.setStepName("Neuer Schritt..."); 
     menuStep.setTask("Beschreibung des Schrittes..."); 
     menuSteps.add(menuStep); 
    } 

    public void addMenuStepRow() { 
     MenuStep menuStep = new MenuStep(); 
     menuSteps.add(menuStep); 
    } 

    public void removeMenuStepRow(MenuStep menuStep) { 
     menuSteps.remove(menuStep); 
    } 

    public List<MenuStep> getMenuSteps() { 
     return menuSteps; 
    } 

    public void setMenuSteps(List<MenuStep> menuSteps) { 
     this.menuSteps = menuSteps; 
    } 

} 

Voici mon entité:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package de.charite.ne.server.persistence.menu; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

/** 
* 
* @author benjamin 
*/ 
@Entity 
@Table(name = "menustep") 
public class MenuStep implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 
    private int sequenceNumber; 
    private String stepName; 
    private String task; 

    public long getId() { 
     return id; 
    } 

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

    public int getSequenceNumber() { 
     return sequenceNumber; 
    } 

    public void setSequenceNumber(int sequenceNumber) { 
     this.sequenceNumber = sequenceNumber; 
    } 

    public String getStepName() { 
     return stepName; 
    } 

    public void setStepName(String stepName) { 
     this.stepName = stepName; 
    } 

    public String getTask() { 
     return task; 
    } 

    public void setTask(String task) { 
     this.task = task; 
    } 
} 
+0

Désolé pour le code XHTML. Ce n'est pas tout le code, il y a des problèmes avec la démarque. :/ – bedit

+0

Lors de l'édition du message, dirigez-vous vers la colonne de droite. Les règles de formatage sont expliquées ici. Fondamentalement, il suffit de mettre en retrait le code avec 4 espaces. Vous pouvez également le faire en sélectionnant le code et en appuyant sur le bouton '010101' dans la barre d'outils ou sur la touche' Ctrl + K'. – BalusC

+0

THX BalusC, ça a marché! Maintenant tout le monde peut lire le code ...;) – bedit

Répondre

0

Je l'ai résolu.

<h:commandButton styleClass="safe" value="Zutat hinzufügen" action="#{MenuCreation.addInTakeRow}"> 
    <f:ajax disabled="true" execute="@this" render="@form"/> 
</h:commandButton> 

désactivé = true pour chacune de ces commandes ajax.

Questions connexes