Проблемы с формой входа в Struts 2

Я хочу создать простую форму входа в Struts 2, но у меня по какой-то причине возникают проблемы с отображением полей ввода, и после отправки имя пользователя не отображается.

Вот код:

Struts перенаправляет на мой struts.xml.

мой 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>

Класс Bean

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;
}
    
    
    
}

JSP

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>

Почему это не работает после того, как я нажму "Отправить"? Он должен идти на Dashboard.jsp?


person exceltior    schedule 09.12.2013    source источник


Ответы (3)


Вы должны сопоставить форму с действием, которое принимает отправленные данные. Используйте теги Struts

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

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

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

private String unknown;

public String getUnknown() {
    return unknown;
}

public void setUnknown(String unknown) {
    this.unknown = unknown;
}
person Roman C    schedule 09.12.2013
comment
это совсем не помогло ... форма все еще не отображается и не работает - person exceltior; 09.12.2013
comment
Это потому, что ваш вопрос неполный. Какой URL вы вводите? - person Roman C; 09.12.2013
comment
он автоматически вводится идеей, которая переходит на localhost: 8084 / struts2, предположительно, после того, как я нажму отправить его на панель инструментов .jsp проблема в том, что форма входа даже не отображается на странице ... - person exceltior; 09.12.2013
comment
Но вы должны localhost:8084/struts2/User/Login - person Roman C; 09.12.2013
comment
Это даже не проблема ... это работает так, потому что страница появляется ... форма входа в систему не ... если я изменяю ее на обычную форму входа без тегов ‹s:›, она появляется, и все работает, кроме имени не отображается на странице приветствия ... это нормально, поскольку я не использую теги struts, и поэтому мне нужно выяснить, почему он не отображается - person exceltior; 09.12.2013
comment
Welcome - это не страница, это действие, которое должно выполняться и возвращать результат диспетчера в Dashboard.jsp. - person Roman C; 09.12.2013
comment
спасибо, я думаю, теперь я понял это .... любая идея, почему форма входа в систему не появляется? - person exceltior; 10.12.2013
comment
Вы должны определить директиву struts taglib для использования тегов Struts. - person Roman C; 10.12.2013
comment
Большое спасибо ... теперь появляется форма входа ... по какой-либо причине, когда я пытаюсь отправить ее, появляется исключение nullpointerexception? code java.lang.NullPointerException org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434) - person exceltior; 10.12.2013
comment
у вас неправильные имена полей, которые не сопоставлены со свойствами действия. Эта трассировка стека бесполезна, я не могу сказать, что FilterDispatcher устарел. Вы можете опубликовать полную трассировку стека из журналов сервера, которые включают основную причину исключения. - person Roman C; 10.12.2013
comment
вы можете привести мне пример, как сопоставить имя поля со свойством действия? - person exceltior; 10.12.2013
comment
См. В этом ответе поле с именем unknown сопоставлено с одноименным свойством действия. - person Roman C; 10.12.2013
comment
Я сопоставил, как я отредактировал выше, следуя вашему примеру, но все же дал мне исключение с нулевым указателем, вы знаете, почему? - person exceltior; 10.12.2013
comment
Прочтите мой комментарий выше, это может быть связано с конфигурацией проекта, набором библиотек, развертыванием. Попробуйте очистить-перестроить-повторно развернуть, если вы находитесь в затмении. - person Roman C; 10.12.2013
comment
хорошо, спасибо за время, которое вы провели со мной ... я постараюсь исправить это ... я попытался очистить и все, но все равно выдает ту же ошибку. - person exceltior; 10.12.2013
comment
Попробуйте этот ответ или то, что предлагается @coding_idiot. Я не могу сосчитать ошибки в вашем коде. - person Roman C; 10.12.2013

Ну вот :

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

Вам необходимо указать полный путь к JSP в ваших результатах. Обратите внимание на /. Вам нужно сделать то же самое с другими страницами результатов, включая Login.jsp

person coding_idiot    schedule 09.12.2013

Определите свойство пароль в своем классе действий, как показано ниже.

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;
}


}
person Prabhakar Manthena    schedule 10.12.2013