Arhn - архитектура программирования

Редактирование одной строки mysql с помощью JSF

Я получаю данные таблицы «логин» mysql на странице xhtml, а затем пытаюсь отредактировать одну строку, а затем обновить ее. Проблема в том, что когда я нажимаю столбец редактирования для одной строки, все строки становятся редактируемыми. Код моей страницы xhtml:

        <?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>Users</title>
 <h:outputStylesheet library="css" name="style.css" />
</h:head>
<h:body>

<h1>Users</h1>

        <h:form>
      <h:dataTable value="#{loginBean.list}"  var="list" border="1">
         <h:column>                 
            <f:facet name="header">Name</f:facet>  
            <h:inputText value="#{list.UName}" size="10" rendered="#{list.isEditable}" />               
            <h:outputText value="#{list.UName}" rendered="#{not list.isEditable}" />
         </h:column>
         <h:column>
            <f:facet name="header">Email</f:facet>
            <h:inputText value="#{list.emailAdd}" size="10" rendered="#{list.isEditable}" />                
            <h:outputText value="#{list.emailAdd}" rendered="#{not list.isEditable}" />
         </h:column>
          <h:column>
            <f:facet name="header">Password</f:facet>
            <h:inputText value="#{list.pword}" size="10" rendered="#{list.isEditable}" />               
            <h:outputText value="#{list.pword}" rendered="#{not list.isEditable}" />
         </h:column>

         <h:column>
            <f:facet name="header">Edit</f:facet>
            <h:commandLink value="Edit" action="#{loginBean.editable(list)}"/>
         </h:column>

         <h:column>
            <f:facet name="header">Update</f:facet>
            <h:commandLink value="Update" action="#{loginBean.updateAction()}"  />
         </h:column>

       <h:column>
            <f:facet name="header">Delete</f:facet>
            <h:commandLink value="Delete" action="#{loginBean.deleteAction(list)}" />
       </h:column>


      </h:dataTable>
   </h:form>


</h:body>
</html>

и код класса loginBean:

   package com;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManager;

import entity.Login;
import session.LoginManagerRemote;
/**
 * @author asma.fardoos
 *
 */
@ManagedBean(name = "loginBean" , eager=true)
@ViewScoped
public class LoginBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String emailid;
    private String password;
    boolean isEditable;


    @EJB
    LoginManagerRemote loginmanager;
    EntityManager em;

    List<Login> list=null;

@ManagedProperty(value="#{navigationBean}")
private NavigationBean navigationBean;

public LoginBean (){


}

    public String dologin()
    {
        /**String username = "madiha";
        String pass = "madiha";
        if (username.equals(emailid) && pass.equals(password)) {
            //JOptionPane.showInputDialog("Eggs are not supposed to be green.");
            // System.out.print("You are logged IN");
            return navigationBean.toWelcome();
        }

        return navigationBean.tofailure();
        */
            System.out.println(">>>> within actionLogin method <<<<");
            if (loginmanager.isUserValid(this.emailid, this.password)){ 
                return navigationBean.toWelcome();
            }
            else
                return navigationBean.tofailure();      
        }

    public List<Login> getList() {
        System.out.println(">>>> In List  method <<<<");
        list = new  ArrayList<Login>();
        list = loginmanager.findAll();

        return list;
    }
    public void setList(List<Login> list) {
        this.list = list;
    }

    public String deleteAction(Login del) {
        System.out.println(">>>> I am in delete method <<<<"); 
        loginmanager.delete(del);
        return "";
    }



public String editable(Login lis)
    {System.out.println(">>>> I am in editable method <<<<");
            lis.setIsEditable(true);
            System.out.println(">>>> I have set editable to true <<<<"); 
        return null;
    }

 public String editAction(Login lis) {
//   LoginManager log = new LoginManager();
    //Login test = log.getRecordByID(lis.getId());
     loginmanager.Edit(lis);
    System.out.println(">>>> I am in editAction method <<<<"); 
    //setIsEditable(true);  
     return "";
 }


 public void updateAction() {

  //  setIsEditable(false); 
    // Query q = em.createQuery("UPDATE Login SET UName='foziiii' ,emailAdd= 'foziiiii',pword='fozi' WHERE id=21");
   //  em.persist();

 }



    public String getEmailid() {
        return emailid;
    }

    public void setEmailid(String emailid) {
        this.emailid = emailid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;

}
    public void setNavigationBean(NavigationBean navigationBean) {
        this.navigationBean = navigationBean;
}

}

и класс объекта входа в систему, метод редактирования:

   @Entity
public class Login implements Serializable {
    private static final long serialVersionUID = 1L;


    @Id
    private int id;

    private String emailAdd;

    private String pword;

    private String UName;

    public Login() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmailAdd() {
        return this.emailAdd;
    }

    public void setEmailAdd(String emailAdd) {
        this.emailAdd = emailAdd;
    }

    public String getPword() {
        return this.pword;
    }

    public void setPword(String pword) {
        this.pword = pword;
    }

    public String getUName() {
        return this.UName;
    }

    public void setUName(String UName) {
        this.UName = UName;
    }
    @Transient
    private boolean isEditable;

    public boolean getIsEditable() {
        return isEditable;
    }

    public void setIsEditable(boolean isEditable) {
        this.isEditable = isEditable;

    }
}
24.11.2014

Ответы:


1

Проблема в том, что вы используете одно и то же логическое состояние для всех строк, вам нужно отдельное состояние для каждой строки.

Так что замените

<h:column>                 
<f:facet name="header">Name</f:facet>  
<h:inputText value="#{list.UName}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.UName}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
<h:inputText value="#{list.emailAdd}" size="10" rendered="#{loginBean.isEditable}"/>               
<h:outputText value="#{list.emailAdd}" rendered="#{not loginBean.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
<h:inputText value="#{list.pword}" size="10" rendered="#{loginBean.isEditable}"/>              
<h:outputText value="#{list.pword}" rendered="#{not loginBean.isEditable}" />
</h:column>

by

<h:column>                 
<f:facet name="header">Name</f:facet>  
<h:inputText value="#{list.UName}" size="10" rendered="#{list.isEditable}"/>              
<h:outputText value="#{list.UName}" rendered="#{not list.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
<h:inputText value="#{list.emailAdd}" size="10" rendered="#{list.isEditable}"/>               
<h:outputText value="#{list.emailAdd}" rendered="#{not list.isEditable}" />
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
<h:inputText value="#{list.pword}" size="10" rendered="#{list.isEditable}"/>              
<h:outputText value="#{list.pword}" rendered="#{not list.isEditable}" />
</h:column>

И добавить

@Transient
private boolean isEditable;

//+ getter and setter

в вашу Login сущность.

Редактировать: согласно разделу комментариев, как обновить представление после действия?

Используя Ajax, ваша ссылка становится

<h:commandLink value="Edit" action="#{loginBean.editable(list)}">
<f:ajax render="yourDataTable"/>
</h:commandLink>

Также см. Разницу между возвратом null и "" из действия JSF< /а>

24.11.2014
  • @BalucC Я внес изменения и отредактировал вопрос. Пожалуйста ознакомтесь. Теперь, когда я нажимаю ссылку «Изменить», ничего не происходит, ни одно поле не редактируется. 24.11.2014
  • Вы добавили rowStatePreserved="true".. почему? И, пожалуйста, измените свой вопрос, чтобы мы могли видеть масштабы и т. д. Кстати, я не BalucC. 24.11.2014
  • извините, я внес изменения, пожалуйста, посмотрите 24.11.2014
  • Пожалуйста, просмотрите, Результат не изменился, При нажатии кнопки «Изменить» ничего не происходит. 24.11.2014
  • Сивагрунатан, да, это называется, я проверил. и он также вызывает объект входа setiseditable. Но они ничего не делают, я не знаю, почему 24.11.2014
  • Ну попробуй вернуть пустую строку а не null и/или обновить страницу. Вы должны использовать Ajax для этой цели. 24.11.2014
  • Вы обновляете страницу после ? 26.11.2014
  • Когда вы обновляете значения в компоненте поддержки, вам необходимо обновить представление на стороне клиента, чтобы увидеть изменения, для этого вы можете использовать запрос ajax или запрос без ajax. Рекомендуется запрос Ajax, так как он обычно легче, я отредактирую свой ответ на примере. 27.11.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..