Методы установки свойств класса Struts 2.5.22 не вызываются - PullRequest
0 голосов
/ 07 августа 2020

Я новичок в Struts и пытаюсь понять, как это работает. Я следовал инструкциям на сайте Struts, реализовал простое веб-приложение и смог запустить его под Tomcat. Приложение очень простое, в котором пользователь регистрирует учетную запись. Однако, когда я нажал кнопку «Отправить», Struts не вызвал методы установки свойств класса действия, и поэтому я не смог получить вводимые пользователем данные.

Вот мои настройки.

полотно. xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
    <display-name>Struts Test</display-name>
    
    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>
    
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    
    <welcome-file-list>  
        <welcome-file>index.html</welcome-file> 
    </welcome-file-list>  
</web-app>

распорки. xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
     "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <include file="struts-default.xml" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.extension" value="action,do" />
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    
    <package namespace="/" name="default" extends="struts-default">
    
        <global-results>
            <result name="welcome"  type="redirectAction">welcome</result>
            <result name="home"     type="redirectAction">home</result>
            <result name="error"    type="tiles">/jsp/shared/error.jsp</result>
        </global-results>
        
        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error" />
        </global-exception-mappings>
        
        <action name="register" class="com.struts.test.RegisterAction" method="execute">
            <result name="success">/success.jsp</result>
        </action>
    </package>    
</struts>

регистр. jsp

<!DOCTYPE html>
<%@page contentType="text/html" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Struts 2 Demo</title>
    </head>
    <body>
        <h1>Welcome To XYZ</h1>
        <p>Please register for an account.</p>

        <s:form action="register">
            <s:textfield name="username" label="Username" />
            <s:textfield name="password" label="Password" />
            <s:submit />
        </s:form>        
    </body>
</html>

RegisterAction. java

public class RegisterAction extends ActionSupport
{
    private final Logger logger = Logger.getLogger(RegisterAction.class);

    private String username; 
    private String password; 

    public RegisterAction ()
    {}

    public void setUsername(String un) {
        this.username = un;
    }

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

    // Getter methods .... 


    @Override
    public String execute() {
        logger.debug("execute()");
        logger.debug("Username: " + getUsername());
        logger.debug("Password: " + getPassword());
        return "success";
    }
}

вывод:

execute()
Username: null
Password: null

Обратите внимание , Я использую Struts 2.5.22. Что я делаю не так? Любая помощь приветствуется.

...