#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:
Я подвергаю сомнению дизайн.
Я бы справился с этим, указав метод в конфигурации действия для одного или обоих сопоставлений.
Метод (ы) установит флаг в действии и вызовет «внутренности» действия, которые будут запрашивать значение флага, и действовать соответствующим образом.