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;
}
}
对不起,您对XHTML代码感兴趣。这不是完整的代码,有减价问题。 :/ – bedit 2010-08-22 08:58:28
编辑消息时,请转到右侧栏。格式化规则在那里解释。基本上,只需使用4个空格缩进代码。您也可以通过选择代码然后按工具栏中的“010101”按钮或“Ctrl + K”键来完成此操作。 – BalusC 2010-08-22 19:02:18
THX BalusC,工作!现在每个人都可以阅读代码...;) – bedit 2010-08-23 09:57:40