Struts (Java), изменение прямого имени для действия, которое принимает входной параметр = страница, не дает мне доступ к этой странице под новым именем - PullRequest
2 голосов
/ 13 августа 2011

Я все еще довольно новичок в Struts (для унаследованного проекта для текущего работодателя), в этом случае я использую Struts 1, поэтому не уверен, имеет ли это значение.

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

Обычно к этой странице обращаются (если я запускаю ее локально):

https://localhost/sc.do?page=download

Форвард установлен как:

<forward name="download" path=".downloadPage"/>

Теперь все, что я пытался сделать, это поменять имя download на что-то другое (в форварде ниже), например downloadtest, я позаботился о том, чтобы перестроить его и т. Д. И перезапустил, теперь я не могу получить к нему доступ в

https://localhost/sc.do?page=download но я также не могу получить доступ к странице по адресу: https://localhost/sc.do?page=downloadtest

Я действительно запутался в том, что еще может быть в файле конфигурации, который бы мешал этому работать, я читал учебные пособия и, насколько я понимаю, это должно сработать. Любой совет с благодарностью.

      <action path="/sc"
              type="com.somecompany.wa.actions.PageDispatchAction"
              name="scAdminForm"
              parameter="page">

        <set-property property="secure" value="true"/>

        <forward name="downloadtest" path=".downloadPage"/>
</action>

Это класс com.somecompany.wa.actions.PageDispatchAction:

public class PageDispatchAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ActionContext context = new ActionContext(mapping, form, request, response);
        Command command = new CheckPageSecurityCommand();
        boolean stop = command.execute(context);
        if (stop) {
            return null;
        } else {
            return (ActionForward) context.get("forward");
        }
    }

    // redirects control to logout page
    // calls to this method should be followed by return null or end of method.
    protected void redirectToLogout(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ServletWebContext context = new ServletWebContext(request.getSession(true).getServletContext(), request, response);
        Command command = new RedirectToLogoutCommand();
        command.execute(context);
    }
}

1 Ответ

1 голос
/ 14 августа 2011

Я больше знаком со Struts 1.2, и то, что у вас здесь выглядит, похоже на Struts 1.3, но я был удивлен, увидев, что PageDispatchAction не расширяет DispatchAction вместо Action.Обычно, когда вы определяете атрибут parameter для action в struts-config.xml, type ссылается на подкласс DispatchAction.Это указывает на то, что любое значение для page, указанное в запросе, будет соответствовать методу в действии с тем же именем, что и здесь.Так что page=download будет отображаться в метод download в PageDispatchAction.В любом случае, я не уверен, как работает то, что у вас здесь есть, так как, на мой взгляд, возвращение ищет ActionForward с именем forward.Возможно, это мой Struts 1.2 смещения, хотя и 1.3 работает по-разному.Не уверен.

...