Struts2, лучшая практика для использования method = {1} - PullRequest
3 голосов
/ 08 апреля 2009

Я новичок в Struts 2 и столкнулся с этим синтаксисом (рекомендуется в руководстве).

<action name="Register_*" method="{1}" class="Register">
    <result name="input">/member/Register.jsp</result>
    <result type="redirectAction">Menu</result>
</action>

Я понимаю, что он вызывает метод Register. {1}. Проблема в том, что пользователь может ввести другое (случайное) значение и вызвать ошибку 500 (которая будет правильно зарегистрирована как ошибка).

Как это можно предотвратить?

Ответы [ 2 ]

8 голосов
/ 25 апреля 2009

В моих приложениях мы используем это так:

  <action name="*/*" class="{1}Action" method="{2}">
       <interceptor-ref name="CustomAuthStack" />       
            <result>/pages/{1}/{2}.jsp</result>
            <result name="input">/pages/error/denied.jsp</result>
            <result name="logout">/pages/error/denied.jsp</result>

            <!-- methods that come back to listing after processing -->
            <result name="remove" type="redirectAction">{1}/list</result>
            <result name="save"   type="redirectAction">{1}/list</result>
            <result name="enable"   type="redirectAction">{1}/list</result>

   ....

   </action>

для слешей в действии, таких как myapp / users / list, вы должны включить слеши в действии с

<constant name="struts.enable.SlashesInActionNames" value="true" />

в файле strus.xml.

так что теперь у вас есть стандарт:

action -> UserAction jsp -----> users / list.jsp

и т.д.

1 голос
/ 08 апреля 2009

Прежде всего, он не будет вызывать метод Register. {1}. Будет вызван Register_ {1}, где {1} может быть типом действия (обычно редактировать, показывать e.t.c)

Это означает, что URL на самом деле

Register_View
Register_Edit
e.t.c.

Таким образом, если пользователь вручную изменяет URL-адрес на что-то, чего нет, например

Register_methodThatDoesNotExist

тогда стойки 2 вернут ошибку.

Но почему это проблема? В любом веб-приложении, использующем любую технологию, если пользователь вручную изменяет URL-адрес, будет возвращена ошибка (также 404)

Что именно вы пытаетесь предотвратить?

Обновление:

Чтобы предотвратить 500 ошибок, вы можете перехватить все действия (которые не соответствуют ни одному правилу) и перенаправить их на страницу с ошибкой. См. Абзац по умолчанию "Подстановочные знаки по умолчанию" на стойках 2 вики

http://cwiki.apache.org/WW/action-configuration.html

Это должно быть в конце конфигурации распорок

...