2010-08-22 71 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命令。