Передать атрибут в действие struts2 через struts.xml

#struts2

#struts2

Вопрос:

Как я могу передать атрибут в мое действие struts2 Java, который сообщает мне, было ли вызвано действие из одного URL-пути / сопоставления действий с другим?

Я подумал, что мог бы поместить что-нибудь в struts.xml для двух сопоставлений действий, но используйте одно и то же действие Java и просто передайте флаг в действие.

Ответ №1:

Вы захотите использовать <param/> тег. Я часто делаю это для действий, которые обрабатывают как добавление, так и редактирование объекта, поскольку поля, проверки и еще много чего практически идентичны. Вот пример этого.

struts.xml

 <action name="users/add" class="AddEditUserAction">
  <param name="edit">false</param>
  <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
</action>

<action name="users/{username}/edit" class="AddEditUserAction">
  <param name="edit">true</param>
  <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
</action>
  

Действие

 public class AddEditUserAction {
  private boolean isEdit;

  // this is called by the struts.xml to set the value
  public void setEdit(final boolean edit) {
    isEdit = edit;
  }
}
  

Для того, чтобы это работало, вам нужен перехватчик статических параметров в вашем стеке (он включен по умолчанию).

Комментарии:

1. Подход «метода» короче и, ИМО, более понятен.

2. Я не вижу, как это было бы короче. Возможно, вы можете расширить свой ответ, включив в него пример?

3. Потому что method="edit" короче, чем <param name="edit">true</param> . Однако для меня аспект связи важнее, чем абсолютные символы.

4. Разница в символах незначительна. Поскольку в этом конкретном примере я использую тот же метод действия для отображения формы добавления / редактирования (ввод), тот же метод проверки и тот же метод для обработки формы (выполнение), я буду придерживаться своего подхода. Для других сценариев ваш может подойти лучше. Спасибо!

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

Ответ №2:

Я подвергаю сомнению дизайн.

Я бы справился с этим, указав метод в конфигурации действия для одного или обоих сопоставлений.

Метод (ы) установит флаг в действии и вызовет «внутренности» действия, которые будут запрашивать значение флага, и действовать соответствующим образом.