Struts2 freemarker не отправляет поля формы

это настолько просто, что я не могу поверить, что я уже потратил на это целый день.

хорошо, вот моя страница бесплатного маркера

    bla bla bla
<form name="message" action="[@s.url action="login"/]" onsubmit="return detectJavaScript();" method="post">
    <fieldset>
        <legend>To begin, type your Graduation Report ID and password</legend>
        <ol>
            <li>
                [@requiredInstruction /]
                <label for="username" accesskey="U">
                    [@requiredField /] <strong>Graduation Report ID:</strong>
                </label>
                <input id="username" name="username" size="10" tabindex="1" type="text" value="${username!''}"
                    [@errorStyle show=(fieldErrors?exists && fieldErrors["username"]?exists)/] />
                [@showFieldError field="username" /]
            </li>
            <li>
                <label for="password" accesskey="P">
                    [@requiredField /] <strong>Password:</strong>
                </label>
                <input id="password" name="password" size="10" tabindex="2" type="password" value="${password!''}" 
                    [@errorStyle show=(fieldErrors?exists && fieldErrors["password"]?exists)/] />
                [@showFieldError field="password" /]
            </li>
bla bla bla

и мой класс действий

public class SubmitLoginAction {
    public String username;
    public String password;


    private static Logger logger = Logger.getLogger(SubmitLoginAction.class);

    public void validate() {
        logger.debug("validate fired");

        logger.debug("username returned: " + username);
        logger.debug("password returned: " + password);

и мой файл распорок

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

<struts>
    <!-- <include file="com/paritysys/util/struts.xml" /> -->

    <constant name="struts.url.includeParams" value="none" />
    <constant name="struts.action.extension" value="html,action" />

    <package name="public" extends="struts-default">
        <interceptors>
            <interceptor name="websiteOnline"
                class="parity.action.website.OnlineInterceptor" />
            <interceptor name="websiteLogin"
                class="parity.action.website.LoginInterceptor" />

            <interceptor-stack name="appStack">
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow"/>
                <interceptor-ref name="modelDriven"/>
                <!-- <interceptor-ref name="paritySessionStack"/> -->
                <interceptor-ref name="websiteOnline" />
                <interceptor-ref name="websiteLogin" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="appStack" />

        <global-results>
            <result name="login" type="redirectAction">
                <param name="actionName">index</param>
            </result>
            <result name="exception" type="freemarker">/public/error.html.ftl</result>
            <result name="error" type="freemarker">/public/error.html.ftl</result>
            <result type="freemarker" name="maintenance">/public/maintenance.html
            </result>
            <result type="freemarker" name="pre-offline">/public/pre-offline.html
            </result>
            <result type="freemarker" name="post-offline">/public/post-offline.html
            </result>
        </global-results>

        <action name="index" class="parity.action.website.LoginAction">
            <result type="freemarker" name="success">/public/index.html.ftl</result>
        </action>

        <action name="login" class="parity.action.website.SubmitLoginAction">
            <result type="freemarker" name="success">/public/questionnaire.html.ftl
            </result>
            <result type="freemarker" name="input">/public/index.html.ftl</result>
        </action>

        <action name="submit" class="parity.action.website.SubmitQuestionnaireAction">
            <result type="freemarker" name="success">/public/thanks.html.ftl
            </result>
            <result type="freemarker" name="input">/public/questionnaire.html.ftl
            </result>
        </action>

        <action name="whereIsMyId" class="parity.action.website.LoginAction">
            <result type="freemarker" name="success">/public/whereIsMyId.html.ftl
            </result>
        </action>

        <action name="loadCollegeFinder" class="parity.action.website.LoadCollegeFinderAction">
            <result type="freemarker" name="success">/public/college_finder.html.ftl
            </result>
        </action>

        <action name="findCollege" class="parity.action.website.FindCollegeAction">
            <result type="freemarker" name="success">/public/college_finder.html.ftl
            </result>
            <result type="freemarker" name="input">/public/college_finder.html.ftl
            </result>
        </action>
    </package>
</struts>

независимо от того, что я делаю, он продолжает возвращать null для пользователя и передавать. Я пробовал с геттерами и сеттерами, без них, похоже, ничего не работает.

Я думал, что это нестандартная вещь со стойками.


person scphantm    schedule 08.11.2011    source источник


Ответы (1)


Это так, но вы вынули его из коробки и перемешали.

Вы удалили перехватчик "params" из стека перехватчиков по умолчанию. Перехватчик "params" устанавливает параметры действия. Я упоминал об этом в моем ответе на ваш предыдущий пост.

(Наряду с устранением необходимости набирать «freemarker».)

(Кстати, я действительно не рекомендую общедоступные свойства, хотя это будет работать, в зависимости от вашей версии Struts - IIRC один из выступов версии OGNL изменил это.)

person Dave Newton    schedule 08.11.2011
comment
да, я перечитал тот пост и понял, что сделал. Я реструктурировал перехватчики и добавил к ним strutsdefault. которые принесли части, о которых я даже не подозревал, не работали (или не существовали) обратно в онлайн. на самом деле довольно интересно. это модификация существующего проекта, поэтому я должен следовать тому же стилю дизайна, что и предыдущий поставщик. Не могу дождаться, пока избавлюсь от этой штуки и переделаю бэкэнд. - person scphantm; 09.11.2011
comment
@scphantm Да, многие (большая часть) функциональности заключены в перехватчиках - я рано научился проверять их, чтобы убедиться, что делаю то, что думал: / - person Dave Newton; 09.11.2011