Struts2: возможно ли использовать динамический вызов метода и указать разные правила проверки для разных методов? - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть в struts.xml:

    <action name="MyAction!*" class="my.Action" method="{1}">
        <result name="step1">step1.jsp</result>
        <result name="step2">step2.jsp</result>         
        <result name="error">error.jsp</result>
    </action>

Тогда у моего класса my.Action есть различные методы, которые можно вызвать, указав имя в URL, например:

http://localhost:8080/MyApp/MyAction!method1.action

Теперь предположим, что поля firstName и lastName являются обязательными в одном методе (например, первом шаге регистрации), а не в других методах.

Если я создам общий файл проверки, такой как MyAction-validation.xml, он создаст поля, необходимые для всех методов. Если я сделаю конкретную проверку, например MyAction-method1-validation.xml, она не будет принята во внимание.

Есть ли решение?

В противном случае мне придется сопоставлять разные действия в struts.xml для каждого метода и не использовать динамический вызов метода - или выполнить проверку вручную.

Ответы [ 2 ]

0 голосов
/ 04 октября 2012

В JIRA Struts 2 есть открытая ошибка:

https://issues.apache.org/jira/browse/WW-1967

Она была открыта с июня 2007 года, поэтому я сомневаюсь, что она когда-нибудь будет исправлена.

0 голосов
/ 06 февраля 2011

Вы можете сделать это, если хотите использовать программный подход к валидации.Обычно это делается с помощью метода validate(), однако вы можете создать методы validate для конкретных методов действий, таких как validateStep1, validateStep2 и т. Д. Они будут проверять только методы step1 и step2.Я не уверен, есть ли возможность использовать разные XML-файлы для разных методов.

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

<action name="MyAction" class="my.Action">
    <result name="step1">step1.jsp</result>
    <result name="step2">step2.jsp</result>         
    <result name="error">error.jsp</result>
</action>
...