Я начинаю писать небольшую поваренную книгу. Поэтому я создал страницу, чтобы добавить некоторые менструации, а менструация должна описывать, как готовить меню шаг за шагом. У меня есть 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;
}
}
Извините за код XHTML. Это не весь код, есть некоторые проблемы с уценкой. :/ – bedit
При редактировании сообщения перейдите в правый столбец. Здесь объясняются правила форматирования. В принципе, просто код отступа с 4 пробелами. Вы также можете сделать это, выбрав код, а затем нажав кнопку «010101» на панели инструментов или клавишу «Ctrl + K». – BalusC
THX BalusC, это сработало! Теперь каждый может прочитать код ...;) – bedit