I want to create a simple login form in Struts 2 but I'm having problems at seeing the input fields for some reason and after I submit the name of the user doesn't appear.

Here is the code:

Struts redirects to my struts.xml.

my struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <!-- devMode equals mode debug information and reload everything for every request -->
    <constant name="struts.devMode" value="true" />
    
    <package name="user" namespace="/User" extends="struts-default">
        <action name="Login">
            <result>Login.jsp</result>
        </action>
        <action name="DashboardAction" class="action.DashboardAction">
            <result name="success">Dashboard.jsp</result>
        </action>
    </package>
    
    
    
    
</struts>

The Bean class

DashboardAction.java:

package action;

public class DashboardAction {
    private String username;
    
    public String execute(){
        return "success";
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
public String getPassword() {
    return password;
}

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

The JSPs

Login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login</title>
    </head>
    <body>
        <h1>Struts 2 Login Test</h1>
        
           <form action="DashboardAction" id="form1" method="post" autocomplete="off">
                <div class="input placeholder">
                    <s:textfield name="username" label="Utilizador"/>
                </div>
                <div class="input placeholder">
                    <s:password name="password" label="Password"/>
                </div>
                <div class="submit">
                    <s:submit value="Entrar" method="execute"/>
                </div>
            </form>
   



    </body>
</html>

Dashboard.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Welcome User</title>
    </head>
    <body>
        <h1>Hello
        <s:property value="username"/>
        </h1>
    </body>
</html>

Why doesn't this work after I press submit? It's supposed to go to Dashboard.jsp?

有帮助吗?

解决方案 2

You should map the form to the action that accept data submitted. Use Struts tags

<%@ taglib prefix="s" uri="/struts-tags" %>

<s:form action="Welcome" ...
  <s:textfield name="username" ...
  <s:password name="unknown" ...

couldn't map the password field because in your action there's not a property. May be if you create it

private String unknown;

public String getUnknown() {
    return unknown;
}

public void setUnknown(String unknown) {
    this.unknown = unknown;
}

其他提示

Here you go :

 <result name="success">/Dashboard.jsp</result>

You need to specify the full-path to the JSPs in your results. Notice the /. You need to do the same to your other result pages including Login.jsp

Define property password in your action class like below.

DashboardAction.java

package action;

public class DashboardAction {
    private String username;
    private String password; // you don't have this line in your action class. 
    public String execute(){
        return "success";
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
public String getPassword() {
    return password;
}

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


}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top