У меня есть приложение, которое хранит пользователей в базе данных.Я хочу, чтобы администраторы могли обновлять данные этих пользователей и пытались создать таблицу данных, которая вызывает бин, чтобы получить список пользователей, и перебирает пользователей для вывода их данных.Я вывожу данные в поля inputText, чтобы администратор мог редактировать их данные.Рядом с полями inputText находится commandLink для сохранения изменений, который должен вызывать bean-метод (sessionScoped) для объединения изменений в базу данных.
Я пытался сделать это с помощью dataTable, а также вручную с foreach,Ни один из них не работал.
Проблема в том, что в bean-методе, который вызывается при щелчке ссылки, значения остаются старыми, а не отредактированными (я хочу, чтобы это были новые значенияиз полей inputText).Я провел небольшое исследование о ActionListener.Поэтому я добавил actionListener в commandLink, который должен копировать новые значения полей inputText в bean-атрибут, но он также не работал.
Это код моей jsf-страницы:
<c:forEach items="#{UserBean.getUserList()}" var="customer">
<tr>
<h:form>
<td>
<h:inputText disabled="true" value="#{customer.username}"/>
</td>
<td>
<h:inputText value="#{customer.firstname}"/>
</td>
<td>
<h:inputText value="#{customer.lastname}"/>
</td>
<td>
<h:inputText value="#{customer.email}"/>
</td>
<td>
<h:commandLink action="#{UserBean.update()}" value="Save changes">
<f:setPropertyActionListener target="#{UserBean.user}" value="#{customer}" />
</h:commandLink>
</td>
</h:form>
</tr>
</c:forEach>
Это мой бин:
@ManagedBean(name="UserBean")
@SessionScoped
public class UserBean implements Serializable{
private Users user;
private List<Users> userList;
public UserBean() {
user = new Users();
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public String update(){
System.out.println(user.getFirstname());
return null;
}
public List<Users> getUserList(){
userList = findAll();
return userList;
}
public void setUserList(List<Users> userList){
this.userList = userList;
}
public List<Users> findAll(){
if(userSessionBean.getSessionUser().getUgroup() > 1){
userList = em.createNamedQuery("Users.findAll")
.getResultList();
return userList;
}
else{
userList = em.createNamedQuery("Users.findById")
.setParameter("id", userSessionBean.getSessionUser())
.setMaxResults(1)
.getResultList();
return userList;
}
}
}
Кто-нибудь знает, что я делаю неправильно или в чем проблемаможет быть?