2010-08-22 70 views
0

我开始编写一本小小的食谱。因此,我创建了一个页面来添加一些菜单步骤,菜单步骤应该描述如何逐步烹饪菜单。 我有一个包含MenuSteps列表的数据表。用户可以单击一个commandLink来添加/删除一个新的步骤。 Bean添加或删除列表的MenuStep并使用ajax重新渲染数据表。这很好,除了我失去了给步骤的两个inputText字段的所有数据。添加或删除一行数据表后,它们全都是空白的。编辑可编辑数据表时丢失数据(JSF2)

我希望有人能帮助我。 下面你可以看到我的代码。让我知道你是否需要更多的投入!

最好的问候, 本杰明

这里是我的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 2010-08-22 08:58:28

+0

编辑消息时,请转到右侧栏。格式化规则在那里解释。基本上,只需使用4个空格缩进代码。您也可以通过选择代码然后按工具栏中的“010101”按钮或“Ctrl + K”键来完成此操作。 – BalusC 2010-08-22 19:02:18

+0

THX BalusC,工作!现在每个人都可以阅读代码...;) – bedit 2010-08-23 09:57:40

回答

0

我解决了它。

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

禁用=真为每个AJAX命令。