Когда я нажимаю с параметрами у меня есть неожиданное исключение в классе ActionSupport в Struts2 - PullRequest
0 голосов
/ 14 февраля 2020

Введение

Для проекта в моем IT-университете я должен создать игру-деминера в приложении Strut2. Для сервера я использую Tomcat.

Вы можете увидеть, как выглядит игра на данный момент:

The deminer game

Когда я нажимаю на коробке мы должны увидеть номер или мину. Для этого случая есть два параметра (X и Y), которые используются для обновления статуса выбранного поля. И чтобы сделать окно кликабельным, я использую код:

<a href="
    <s:url action='demineur' method="connexion">
       <s:param name="x" value="#x.index"/>
       <s:param name="y" value="#y.index"/>
    </s:url>
">

Когда мы хотим играть в эту игру, мы должны ввести имя пользователя:

deminer form

Когда мы входим в игру, у нас есть сеанс, который создается с именем игрока, и во время сеанса мы сохраняем игру.

И когда мы взаимодействуем с игрой сохранение игры - обновление

Шахта создается с помощью API (ModeleDemineur: 1.1), предоставленного учителем, и отображает его как:

demineur. jsp

    <table>
    <s:iterator status="x" var="ligne" value="cases">
        <tr>
        <s:iterator status="y" var="case" value="ligne">
            <td>
            <s:if test="getCachee()">
                <a href="
                    <s:url action='demineur' method="connexion">
                        <s:param name="x" value="#x.index"/>
                        <s:param name="y" value="#y.index"/>
                    </s:url>
                ">

                    <img src="${pageContext.request.contextPath}/img/cellCovered.png"/>
                </a>
            </s:if>
            <s:else>
                <s:if test="getValeur() == -1">
                    <img src="${pageContext.request.contextPath}/img/mineExploded.png"/>
                </s:if>
                <img src="${pageContext.request.contextPath}/img/box<s:property value='getValeur()'/>.png"/>
            </s:else>
            </td>
        </s:iterator>
        </tr>
    </s:iterator>
    </table>

ActionDemineur. java

public class ActionDemineur extends ActionSupport implements SessionAware {

    String username;
    GestionDemineur demineur;
    Plateau plateau;
    Case[][] cases;
    String val;
    String x,y;

    private Map<String, Object> session;

    public String getUsername() {
        return username;
    }

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

    public GestionDemineur getDemineur() {
        return demineur;
    }

    public void setDemineur(GestionDemineur demineur) {
        this.demineur = demineur;
    }

    public Plateau getPlateau() {
        return plateau;
    }

    public void setPlateau(Plateau plateau) {
        this.plateau = plateau;
    }

    public Case[][] getCases() {
        return cases;
    }

    public void setCases(Case[][] cases) {
        this.cases = cases;
    }

    public String getVal() {
        return val;
    }

    public void setVal(String val) {
        this.val = val;
    }

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }

    public String getY() {
        return y;
    }

    public void setY(String y) {
        this.y = y;
    }

    @Override
    public void setSession(Map<String, Object> map) {
        this.session = map;
    }

    public Map<String, Object> getSession() {
        return session;
    }

    public String connexion() throws ExceptionLoginDejaPris {
        if(!session.containsKey("user"))
        {
            if(username != null)
            {
                session.put("user", username);
            }
            else {
                return INPUT;
            }
        }

        if(!session.containsKey("plateau")) {
            System.err.println("plateau not found");
            demineur = new GestionDemineur();
            demineur.connexion(username);
            plateau = demineur.getPlateau(username);
            cases = plateau.getMonPlateau();
            session.put("plateau", plateau);
            session.put("user", username);
        }

        username = (String) session.get("user");
        plateau = (Plateau) session.get("plateau");
        cases = plateau.getMonPlateau();
        System.err.println(plateau);

        if(x != null && y != null)
        {
            System.err.println("x and y not null");
            System.err.println(Integer.parseInt(x) + " -- " + Integer.parseInt(y));
            try {
                plateau.decouvrirCase(Integer.parseInt(x), Integer.parseInt(y));
            } catch (BombeException e) {
                session.remove("plateau", plateau);
                session.remove("user", username);
                return "perdu";
            }
            System.err.println(plateau.getMonPlateau()[Integer.parseInt(x)][Integer.parseInt(y)]);

        }
        return SUCCESS;
    }

}

Struts. 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>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

    <package name="/" extends="struts-default">

        [...]

        <action name="demineur" class="struts.ActionDemineur" method="connexion">
            <result name="input">/WEB-INF/pages/connexionDemineur.jsp</result>
            <result name="success">/WEB-INF/pages/demineur.jsp</result>
            <result name="perdu">/WEB-INF/pages/perduDemineur.jsp</result>
        </action>
    </package>

</struts>

pom. xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>fr.univ-orleans.ufrst.info.l3.pnt</groupId>
    <artifactId>HelloStruts2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.22</version>
        </dependency>

        [...]

        <dependency>
            <groupId>fr.miage.orleans.tp</groupId>
            <artifactId>ModeleDemineur</artifactId>
            <version>1.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>13</source>
                    <target>13</target>
                    <encoding>UTF-8</encoding>
                </configuration>
                <version>3.8.1</version>
            </plugin>

            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.25.v20191220</version>
            </plugin>
        </plugins>
    </build>

    <properties>
        <maven.compiler.source>13</maven.compiler.source>
        <maven.compiler.target>13</maven.compiler.target>
    </properties>
</project>

Ошибки

ERROR ParametersInterceptor Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'x' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'x' with value ['0', ]
ERROR ParametersInterceptor Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'y' on 'class com.opensymphony.xwork2.ActionSupport: Error setting expression 'y' with value ['4', ]

Мои эссе

Я попытался добавить в распорки. xml в строку xml <interceptor-ref name=params />, но он удаляет данные в сеансе, которые имеют сохранение игра и текущее имя пользователя.

Спасибо за вашу помощь в будущем

1 Ответ

0 голосов
/ 14 февраля 2020

Я нашел ответ!

Я поставил аргумент метод , но это настоящая ошибка!

<s:url var="demineurURL" action='demineur'>
    <s:param name="x" value="#x.index"/>
    <s:param name="y" value="#y.index"/>
</s:url>

<s:a href="%{demineurURL}">
    <img src="${pageContext.request.contextPath}/img/cellCovered.png"/>
</s:a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...