Я пытаюсь редактировать заполненную форму, но она отправляет старые значения в managedBean только после нажатия кнопки Command.
Быстрый обзор концепции:
у меня есть для каждого столбца поле outputText и inputText всякий раз, когда я нажимаю на кнопку edit, я отправляю идентификатор строки в управляемый компонент с именем EditBean и сохраняю идентификатор строки, если идентификатор в компоненте совпадает с идентификаторомв строке будет отображен inputText, иначе будет выведен outputText, теперь, когда я изменяю значения в полях inputText, строка обновляется старыми значениями!
Страница JSF:
<h:form id="form">
<h:dataTable value ="#{profil.getProfils()}" var ="profil" class="table table-dark">
<h:column>
<f:facet name = "header">Login</f:facet>
<h:inputText value = "#{profil.login}" id="login" size = "10" rendered = "#{edit.id eq
profil.login}" class="form-control"/>
<h:outputText value = "#{profil.login}" rendered = "#{edit.id ne profil.login}" />
</h:column>
<h:column>
<f:facet name ="header">Edit</f:facet>
<h:commandButton id="edit" value="Edit" action="#{edit.setId(profil.login)}"
rendered ="#{edit.id ne profil.login}" class="btn btn-primary">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<h:commandButton id="save" value ="Save"
action="#{profil.updateProfil()}"
rendered = "#{edit.id eq profil.login}" class="btn btn-primary" >
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
ProfilBean:
@Entity
@Table(name="profil")
@ManagedBean(name="profil")
public class Profil implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String login;
public String updateProfil() {
ProfilDao dao = new ProfilDao();
dao.updateProfile(this);
EditBean eb = new EditBean();
eb.setId(null);
return "saved";
}