Avatar billede trp79 Nybegynder
29. november 2004 - 10:28 Der er 8 kommentarer og
1 løsning

Opdatering fortages men gamle data vises i formen

Hejsa
Når jeg redigerer en bruger, så bliver opdateringer gemt i databasen. Problemet er, at tekstfelterne på siden ikke bliver opdateret når jeg har poster vha submit knappen så er det de gamle data, der fremgår af mine tekstfelter og altså ikke det som lige er registreret i db. Er der nogen der har en ide om hvad jeg gør forkert?

På forhånd tak, mvh
Torben

JSP-siden:
*****************************************************************
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page language="java" import="vindmolle.DbHandler"%>
<jsp:useBean id="userBean" class="vindmolle.UserBean" scope="session"/>
<jsp:setProperty name="userBean" property="*"/>
<html>
<head><title>Redigering af brugeren: <%= userBean.getUsername() %></title></head>
<body>

<h1>Redigering af brugeren: <%= userBean.getUsername() %></h1>
<% 
      //Find den indloggede brugers rolle
    String edittorRole = "";
    if(request.isUserInRole("superadmin")) edittorRole = "superadmin";
    else if(request.isUserInRole("admin")) edittorRole = "admin";
    else edittorRole = "user";

    DbHandler dbHandler = new DbHandler();
    dbHandler.open();
   
    //Brugeren redigeres, hvis den inloggede har rettigheder til det
    if(dbHandler.kanRedigerBruger(userBean.getUsername(), edittorRole, request.getRemoteUser()))
    {
      userBean.findBrugerDetaljer();
%>
      <form action="editUser.jsp" method="post">
      <table>
      <tr>
        <td>Brugernavn:</td>
        <td><input type="text" name="username" value="<%= userBean.getUsername() %>">
        </td>
      </tr>
      <tr>
        <td>Epost:</td>
        <td><input type="text" name="email" value="<%= userBean.getEmail() %>"></td>
      </tr>
      <tr>
        <td>Adganskode</td>
        <td><input type="text" name="password" value="<%= userBean.getPassword() %>"></td>
      </tr>
      <tr>
        <td></td>
        <td><input type="submit" name="handling" value="rediger bruger"></td>
      </tr>
      </table>
      </form>
      <font color="blue">Der sendes automatisk en e-mail til brugeren om, at han nu er redigeret og derfor også hans brugernavn og password.</font><br>
      <font color="red">
      <%
        String handling = request.getParameter("handling");
        if ("rediger bruger".equals(handling)) {
          if (userBean.redigerBruger(request.getParameter("password"), request.getParameter("email"))){
            %>Succecfuld redigering - <%
          }
          else {
            %>Bruger kunne ikke redigeres. <%
          }
        }
      %>
      <%= userBean.getMessage() %>
      </font>
<%
    }
    else
    {
%>    Du har ikke rettigheder til at redigere denne bruger!
<%
    }
%>

<br>
<a href="userList.jsp">userList</a>
</body>
</html>
*****************************************************************


Bean klassen:
*****************************************************************
package vindmolle;

import java.sql.*;
import javax.servlet.*;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;

/**
* Denne javabønne har ansvaret for registrering af en bruger.
*/
public class UserBean
{
    private String username = "";
    private String password = "";
    private String email = "";
    private String message = "";      // fejlmeddelelse til brugeren
  private Util util = new Util();

    public void setUsername(String un)  { username=un; }
    public String getUsername()        { return username; }

    public void setPassword(String pa) { password = pa; }
  public String getPassword()          { return password; }

    public void setEmail(String email)    { this.email = email; }
    public String getEmail()              { return email; }

    public void setMessage(String m)  { message = m; }
    public String getMessage() { String m=message; message=""; return m; }

    /** Forbindelsen til connectionpoolen. Oprettes når klassen indlæses */
  private DbHandler dbHandler = new DbHandler();

    /**
    * Registrerer ny bruger og sender adgangskode til epost-adressen
    * @return true hvis oprettelsen gik godt, ellers false.
    */
    public synchronized boolean opretBruger()
    {
    int brugerOprettet;
        if (username.length() >= 2 && email.length() >= 5 && password.length() >=6)
    {
      dbHandler.open();
      brugerOprettet = dbHandler.opretBruger(username, password, email);
      if(brugerOprettet == 0)
        {
          try
          {
            String overskrift = "Du er nu oprettet som bruger på localhost/TP-Test";
            String tekst = "Dit brugernavn er:"+username+"\n"+"Din kode er:"+password+"\n"+"Du er registreret med følgende email:"+email+"\n"+"Mvh"+"\n"+"Localhost/TP-Test";
            String afsender = "TEST@TEST.Test";
            String modtager = email;
            String smtphost = "smtp.mail.dk";
            util.sendMail(overskrift, tekst, afsender, modtager, smtphost);
            message = "Brugeren "+username+" oprettet og email afsendt";
            return true;           
          }
          catch (Exception e)
          {
            System.err.println(e);
          }
        }
        else if(brugerOprettet == 1)
        {
          message = "En bruger med "+username+" findes i forvejen - vælgt et nyt brugernavn";
          return false; 
        }
        else if(brugerOprettet >= 2)
        {
          message = "Der skete en teknisk fejl(nr. "+brugerOprettet+") i forbindelse oprettelse af bruger)";
          return false; 
        }
    }
        else{
            message = "Brugernavn(min 2 karakter), adgangskode(min 6 karakter) og gyldig epost skal være udfyldt";
      return false;
        }
    return false;
    }

    public synchronized boolean redigerBruger(String requestPassword, String requestEmail)
    {
    this.password = requestPassword;
    this.email = requestEmail;
    int brugerRedigeret; //0=redigeret, 1=har ikke rettigheder til at redigerer bruger, 2=brugernavn findes ikke i tomcat_users, 3=exception - teknisk fejl
        if (email.length() >= 5 && password.length() >=6)
    {     
      dbHandler.open();
      brugerRedigeret = dbHandler.redigerBruger(password, email, username);
      if(brugerRedigeret == 0)
        {
          try
          { //Mail:
            String overskrift = "Du har redigeret din brugerprofil på localhost/TP-Test";
            String tekst = "Dit brugernavn er:"+username+"\n"+"Din kode er:"+password+"\n"+"Du er registreret med følgende email:"+email+"\n"+"Mvh"+"\n"+"Localhost/TP-Test";
            String afsender = "tope01ab@student.cbs.dk";
            String modtager = email;
            String smtphost = "smtp.mail.dk";
            util.sendMail(overskrift, tekst, afsender, modtager, smtphost);
            message = "Opdatering på "+username+" er nu gennemført";
            return true;           
          }
          catch (Exception e)
          {
            System.err.println(e);
            message = "Teknisk fejl under tilsending af mail til "+username+" med redigerede oplysninger(UserBean.java - redigerBruger)";
          }
        }
        else if(brugerRedigeret == 1)
        {
          message = "Du har ikke rettigheder til at redigere "+username+".";
          return false; 
        }
        else if(brugerRedigeret == 2)
        {
          message = "Brugeren "+username+" findes ikke - denne fejl burde ikke kunne forekomme.";
          return false; 
        }       
        else if(brugerRedigeret >= 3)
        {
          message = "Der skete en teknisk fejl(nr. "+brugerRedigeret+") i forbindelse oprettelse af bruger)";
          return false; 
        }
    }
        else{
            message = "Brugernavn(min 2 karakter), adgangskode(min 6 karakter) og gyldig epost skal være udfyldt";
      return false;
        }
    return false;
    }

    /**
    * Finder de resterende detaljer om brugeren
    * @return true hvis oprettelsen gik godt, ellers false.
    */
    public synchronized boolean findBrugerDetaljer()
    {
    if(username!=null)
    {
      dbHandler.open();
      UserBean temp = dbHandler.getUserBean(username);
      password = temp.getPassword();
      email = temp.getEmail();
      message = "Du kan nu redigerer overstående bruger - detaljerne er hentet i databasen ud fra brugernavnet";
      return true;
    }
    else
    {
      message = "Du søgte efter en bruger, der ikke eksisterer i databasen";
      return false;
    }
  }
}
*****************************************************************
Avatar billede erikjacobsen Ekspert
29. november 2004 - 10:35 #1
Måske blot at lave opdatering i databasen, før du aflæser den.
Avatar billede trp79 Nybegynder
29. november 2004 - 10:55 #2
Hej Erik
Jeg er ret ny inden for jsp, så jeg kan ikke lige gennemskue, hvordan jeg kommer uden om dette problem. Men nu du siger det, så kan jeg da egentlig godt se, at det er fordi, at jeg aflæse inden jeg opdater :(
Som det er nu, så poster jeg jo ved submit, og hvis handlingen er "opdater", så tjekker jeg på om den indloggede bruger har rettighed til at opdatere - har han det, ja så opdateres der. Du har vel ikke en par hint til hvordan jeg kommer videre?
Avatar billede erikjacobsen Ekspert
29. november 2004 - 11:15 #3
Jo, flyt bare din opdatering op i toppen.
Avatar billede arne_v Ekspert
29. november 2004 - 21:23 #4
Lyt bare til Erik

De magiske linier er:

userBean.findBrugerDetaljer
...
userBean.redigerBruger
Avatar billede trp79 Nybegynder
30. november 2004 - 10:30 #5
Godmorgen.
Ville blot lige orientere om, at jeg nok først kommer til min egen pc igen imorgen, så det er ikke for at være uhøflig, at jeg ikke er vendt tilbage med kommentar endnu... :)
Avatar billede trp79 Nybegynder
01. december 2004 - 18:33 #6
Nå, så har jeg fået kigget lidt på det - men jeg kan ikke helt følge jer :(

Altså som det er nu (hvor ovenstående kode bruges). Så har jeg en userList side, hvor man kan klikke på en bruger og sendes editUser.jsp med et username som parameter. Nu tjekkes der så på om denne indloggede bruger har rettigheder til at redigerer i den bruger han klikkede på. Har han det hentes oplysninger om brugeren, der skal redigeres med userBean.findBrugerDetaljer() - de restende parametre(email, kode) sættes i userBeanen, hvor username allerede er sat automatisk.
Når man så har ændret i tekstfelterne, og trykker submit, da postes kode og email til siden selv, og udfra det ændres der i userbeanen og skrives til db.

Jeg kan ikke lige se, hvordan jeg kan flytte opdateringen op i toppen :( Der skal jo tjekkes på om den indloggede bruger har rettigheder til at redigere brugeren.

Men hvis jeg nu smider userBean.findBrugerDetaljer() ned i
    <%
        String handling = request.getParameter("handling");
        if ("rediger bruger".equals(handling)) {
          if (userBean.redigerBruger(request.getParameter("password"), request.getParameter("email"))){
userBean.findBrugerDetaljer()//hvis den flyttes her til
            %>Succecfuld redigering - <%
          }
          else {
            %>Bruger kunne ikke redigeres. <%
          }
        }
      %>
så virker det egentlig lige bortset fra, at man ikke kan se kode og email når man rammer editUser.jsp fra userlist siden, hvilket ikke er så godt :( smider man så også en userBean.findBrugerDetaljer() op i toppen af siden, ja så er der det samme problem som spørgsmålet oprindeligt går ud på.

Håber jeg har forklaret mig forståelig....
Avatar billede trp79 Nybegynder
07. december 2004 - 07:31 #7
Nå, så har jeg endelig fundet ud af det - det er selvfølgelig mig, der har været lidt af et tågehorn.... beklager. Jeg skulle selvfølgelig bare have gjort, som Erik og Arne sagde!

Erik, er du ikke flink at smide et svar (det var jo dig, der kom med løsningen)...

Tak for hjælpen til jer begge, mvh
Torben

Til andres oplysning, så er det kun editUser.jsp, der er rettet i - den ser nu således ud:

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page language="java" import="vindmolle.DbHandler"%>
<jsp:useBean id="userBean" class="vindmolle.UserBean" scope="session"/>
<jsp:setProperty name="userBean" property="*"/>
<html>
<head><title>Redigering af brugeren: <%= userBean.getUsername() %></title></head>
<body>

<h1>Redigering af brugeren: <%= userBean.getUsername() %></h1>
<% 
      //Find den indloggede brugers rolle
    String edittorRole = "";
    if(request.isUserInRole("superadmin")) edittorRole = "superadmin";
    else if(request.isUserInRole("admin")) edittorRole = "admin";
    else edittorRole = "user";

    DbHandler dbHandler = new DbHandler();
    dbHandler.open();
    if(dbHandler.kanRedigerBruger(userBean.getUsername(), edittorRole, request.getRemoteUser()))
    {
        String handling = request.getParameter("handling");
        if ("rediger bruger".equals(handling)) {
          if (userBean.redigerBruger(request.getParameter("password"), request.getParameter("email"))){
            %><font color="red">Succecfuld redigering af brugeren </font><font color="blue"><b><%=userBean.getUsername()%></b></font><%
          }
          else {
            %><font color="red">Brugeren </font><font color="blue"><b><%=userBean.getUsername()%></b></font><font color="red"> kunne ikke redigeres!</font><%
          }
        }

      userBean.findBrugerDetaljer();
%>
      <form action="editUser.jsp" method="post">
      <table>
      <tr>
        <td>Brugernavn:</td>
        <td><input type="text" name="username" value="<%= userBean.getUsername() %>" disabled="disabled" readonly="readonly">
        </td>
      </tr>
      <tr>
        <td>Epost:</td>
        <td><input type="text" name="email" value="<%= userBean.getEmail() %>"></td>
      </tr>
      <tr>
        <td>Adganskode</td>
        <td><input type="text" name="password" value="<%= userBean.getPassword() %>"></td>
      </tr>
      <tr>
        <td></td>
        <td><input type="submit" name="handling" value="rediger bruger"></td>
      </tr>
      </table>
      </form>
      <font color="blue">Der sendes automatisk en e-mail til brugeren om, at han nu er redigeret og derfor også hans brugernavn og password.</font><br>
      <font color="red">
      <%= userBean.getMessage() %>
      </font>
<%
    }
    else
    {
%>    Du har ikke rettigheder til at redigere denne bruger!
<%
    }
%>

<br>
<a href="userList.jsp">userList</a>
</body>
</html>
Avatar billede erikjacobsen Ekspert
07. december 2004 - 10:14 #8
Tak, men jeg samler slet ikke på point.
Avatar billede trp79 Nybegynder
07. december 2004 - 11:54 #9
Okay, så smider jeg selv lige et svar og siger tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester