Struts 2 Mapping funktioniert nicht richtig

Status
Nicht offen für weitere Antworten.

Player00

Mitglied
Hi ihr ich habe folgende Fragen bzw. Probleme.

Ich beschäftige mich seit kurzem mit dem Framework Struts 2.0 und anscheinend verstehe ich dort einige Dinge nicht, die mir
auch nach mehrmaligen lesen der Site apache.org/struts nicht klar werden wollen.

Deswegen dachte ich versuche mal bei euch mein Glück ob es mir vielleicht jemand erklären kann.

Es geht um folgendes: Ich habe eine Login.jsp welche wie der Name schon sagt eine Loginseite ist. Sie mach die Abfrage
ob in der Session schon ein bestimmtes Objekt vorhanden ist oder nicht. Falls nein Kommt ein normales Namensfeld und Passwort feld
zum einloggen. Der Submitbutoon leitet das ganze an die LoginAction genauer an die Methode addUser().
Die mache ich (in der jsp) wie folgt: <s:form action="Login_addUSER">

Die addUser schreibt falls es den User gibt diesen in die Session und returnt den String "HIHI"
Das Mapping ( in der struts.xml) sieht wie folgt aus:

<action name="Login_*" method="{1}" class="net.rentnervz.action.Login">

<result name="success">/index.jsp</result>
<result name="input">/jsp/Login.jsp</result>
<result name="HIHI">/index.jsp</result>
<result name="U">/jsp/result.jsp</result>

</action>


und es funktioniert auch! es wird mir die index.jsp angezeigt.

Nun rufe ich wieder die Login.jsp auf und er erscheint sie sind bereits eingeloggt! Nun habe ich dort einen Button gemacht Logout
welcher in der Action die Mathode loescheUSER aufruft ( bzw. soll) aber genau dies Funktioniert nicht.

Ich komme anscheint nicht in die Methode denn es wird immer nur immer wieder die Login angezeigt.
Selbst ein System.out in der loescheUser wird nicht ausgegeben.


DESWEGEn NUN meine Fragen: Ersten wieso das? Wo liegt mein Fehler was amche ich vielleicht falsch.
Dann wie funktioniert das Wild-Mapping genau? #
Wann wird die execute() in einer Action aufgerufen? denn irgendwie habe ich das
gefühl das passiert immer mal zwischendurch


Ich danke euch schon mal falls mir einer helfen möchte denn ich komme dort echt nicht mehr weiter

THX G
 
M

maki

Gast
Nun rufe ich wieder die Login.jsp auf und er erscheint sie sind bereits eingeloggt! Nun habe ich dort einen Button gemacht Logout
welcher in der Action die Mathode loescheUSER aufruft ( bzw. soll) aber genau dies Funktioniert nicht.
Zeig doch mal das Form Element, speziell die Action dürfte interessant sein.
 

Player00

Mitglied
Meine Action
Code:
package net.rentnervz.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.rentnervz.bean.User;
import net.rentnervz.db.DataAccessObject;
import net.rentnervz.util.RentnerVzConst;
import org.apache.struts2.interceptor.ServletRequestAware;


public class Login extends ActionSupport implements ServletRequestAware{
    
    public static final String MESSAGE = "Benutzername oder Passwort falsch";
    private DataAccessObject dao;
    private HttpServletRequest request;
    private String message;
    HttpSession session;
    private String username;
    private String password;
    public String execute() throws Exception {
          
        setMessage(MESSAGE);
//        if (isInvalid(getUsername())) return INPUT;
//        if (isInvalid(getPassword())) return INPUT;
        
     return SUCCESS;    
    }
    
    private boolean isInvalid(String value) {
        
        return (value == null || value.length() == 0);
    }
    public String addUSER() throws Exception {
        
        System.out.println("Geschafft endlich hat das Mapping mal geklappt ADDD..............................................");
        return this.getUserFromDB();
    }
     public String loescheUSER() throws Exception {
        
        System.out.println("Geschafft endlich hat das Mapping mal geklappt REMOVE..............................................");
       return this.removeUser1();
        
    }
     
   public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
      public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    
   
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setMessage(String message){
        this.message = message;
    }
    
    public String getMessage() {
        return message;
    }   
    public String getUserFromDB(){

        if (dao == null) {
            dao = DataAccessObject.getInstance();
        }
        try{
            User user = (User)dao.validUser(username, password);
            
            if(user == null){
                return INPUT;
            }
            
            request.getSession().setAttribute(RentnerVzConst.SESSION_USER, user);

        }catch(Exception e){
            System.out.println("Fehler in LoginAction" +e.getMessage());
            return INPUT;
        }
        return "HIHI";
    }

    private String removeUser1() {
        System.out.println("Versuch zu removen ");
        request.getSession().removeAttribute(RentnerVzConst.SESSION_USER);
        System.out.println("removed");
        return "BLUBB";
    }
}

Meine jsp

Code:
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>
        <title>Login</title>
    </head>
    <body>
        
        <s:if test="#session.loggedInUser == null">
            
            <h1>Bitte geben Sie Ihre Benutzerdaten ein</h1>
            <h2><s:property value="message"/></h2>
            <s:form action="Login_addUSER"> 
                
                <s:textfield label="Benutzername" name="username" />
                <s:password label="Password" name="password" />
                
                <s:submit/>
                
            </s:form>
        </s:if>
        <s:else>
            
 
 

            <h1>Sie sind bereits eingeloggt Herr 
                <s:label label="%{#session.loggedInUser.lastName}"  />

                
                
                <s:form action="Login_loescheUSER"> 
                    <s:label label="%{#session.loggedInUser.lastName}"/>
           
                    <s:submit/>
                </s:form>
                
                [*][url="<s:url action="]</s:url>">Raus[/url]
                
            </h1></
        </s:else>
        
    </body>
</html>

Mapping:

Code:
   <action name="Login_*" method="{1}" class="net.rentnervz.action.Login">
            <result name="addUSER">/jsp/result.jsp</result>
            <result name="loescheUSER">/jsp/result.jsp</result>
            <result name="success">/index.jsp</result>
            <result name="input">/jsp/Login.jsp</result>
            <result name="HIHI">/index.jsp</result>
            <result name="BLUBB">/jsp/result.jsp</result>
            
        </action>


Wie gesagt wenn maches komisch erscheint liegt es daran, dass ich nun mehrmals mit dem code gespielt habe um zu verstehen wie dieses mapping funktioniert ...
 

sulley

Neues Mitglied
Hallo,

ich habe genau das gleiche Problem.

wenn ich eine bestimmte Action aufrufe werde ich immer gleich zu der Seite vergeleitet, die ich bei <result name="input" eingetragen habe.

Allerdings kommt der ganze Fehler nur bei der einen Methode. Alle anderen funktionieren ohne Probleme.

Bist du mittlerweile zu einen Ergebnis gekommen an was das hängen könnte?

Wäre super, wenn du deine Erfahrung dazu hier posten könntest.

Viele Dank schonmal im Vorraus.
 
G

Gast

Gast
Ich versuche das hier mal kurz mit einer Fehlermöglichkeit aufzulösen:
Validator - Falls ein Validator anspringt, ist es nicht (aus meiner Sicht) möglich Funktionen "richtig" auszuführen, wenn die Bedingungen nicht erfüllt sind.
Beispiel:
- LoginHandler.java (logout und login methode)
- LoginHandler-validation.xml (username und password müssen gesetzt werden)
- Login.jsp (enthält if (!loggedin) zeige form(mit validation); else Logout-Link)
- action="Login" method="login" / action="Logout" method="logout"
Wenn man sich nun einloggen will, geht alles glatt. Bei einem Klick auf Logout-Knopf fliegt man jedoch in das Result INPUT, da die validation für die Klasse fehlschlägt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Problem mit struts nested tags Server einrichten und konfigurieren 1
O struts:Vector in Select-Box mit options o. optionsCollection Server einrichten und konfigurieren 3
S Struts FileUpload - Exception Server einrichten und konfigurieren 5
G struts-config.xml und validierung in Form mit mehreren input Server einrichten und konfigurieren 3
B Struts - Example Application - "struts-mailreader" Server einrichten und konfigurieren 6
B application scope und Struts Action Server einrichten und konfigurieren 3
K Tomcat: maximale Anmeldeversuche einschränken (funktioniert nicht) Server einrichten und konfigurieren 1
D Datasource URL mit port funktioniert nicht Server einrichten und konfigurieren 2
R Verbindung zwischen Apache und Tomcat über mod_jk funktioniert nur sporadisch Server einrichten und konfigurieren 0
M Connection Pool funktioniert nicht Server einrichten und konfigurieren 3
N Weiterleitung Apache mit Tomcat über mod_jk funktioniert nicht... Server einrichten und konfigurieren 7
J Tomcat: shutdown.sh script funktioniert plötzlich nicht mehr Server einrichten und konfigurieren 3
P maven-tomcat-plugin redeploy funktioniert nicht? Server einrichten und konfigurieren 6
T RetrieveFile von Commons Net funktioniert nicht Server einrichten und konfigurieren 3
K [Tomcat+Axis] SSL funktioniert nicht Server einrichten und konfigurieren 2

Ähnliche Java Themen

Neue Themen


Oben