2010-08-22 6 views
0

Я начинаю писать небольшую поваренную книгу. Поэтому я создал страницу, чтобы добавить некоторые менструации, а менструация должна описывать, как готовить меню шаг за шагом. У меня есть datatable, содержащий список MenuSteps. Пользователь может нажать кнопку commandLink, чтобы добавить/удалить новый шаг. Bean добавляет или удаляет MenuStep из списка и повторно передает данные с помощью ajax. Это отлично работает, за исключением того, что я потерял все данные, данные для двух полей inputText для шагов. Они все пустые после того, как я добавляю или удаляю ряд моих данных.Потеря данных при редактировании редактируемых данных (JSF2)

Я надеюсь, что кто-то может мне помочь. Ниже вы можете увидеть мой код. Дайте мне знать, если вам нужно больше информации!

С наилучшими пожеланиями, Benjamin

Вот мой XHTML (это часть шаблона):

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

Вот мой 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; 
    } 

} 

Вот моя сущность:

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

Извините за код XHTML. Это не весь код, есть некоторые проблемы с уценкой. :/ – bedit

+0

При редактировании сообщения перейдите в правый столбец. Здесь объясняются правила форматирования. В принципе, просто код отступа с 4 пробелами. Вы также можете сделать это, выбрав код, а затем нажав кнопку «010101» на панели инструментов или клавишу «Ctrl + K». – BalusC

+0

THX BalusC, это сработало! Теперь каждый может прочитать код ...;) – bedit

ответ

0

Я решил.

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

отключен = истина для каждой из этих команд Ajax.

Смежные вопросы