Struts 1 - Как отобразить ActionMessages - PullRequest
8 голосов
/ 08 марта 2010

Я отображаю ActionMessage s через JSP файл с помощью следующей команды:

<logic:messagesPresent message="true">
    <ul id="messsages">
        <html:messages id="msg" message="true">
            <li><bean:write name="msg"/> </li>
        </html:messages>
    </ul>
</logic:messagesPresent>

Теперь я хочу отображать только выбранные сообщения. Как я могу указать, какое сообщение отображать?

Обновлено

На самом деле у меня есть два объекта ActionMessages - messages и warnings. Теперь я хочу отобразить их оба на отдельной странице JSP ... Одна страница для отображения messages, а другая для warnings.

Итак, как указать на странице JSP, какие сообщения отображать?



Обновлено - 2

Теперь я нашел странную вещь.

saveMessages(request, messages);
saveMessages(request, warnings);

Когда я писал приведенный выше код, работал только warnings. Когда я изменил порядок вышеупомянутых двух утверждений, тогда работал только messages.

Похоже, мы можем добавить только один ActionMessages объект в запрос. Если это правильно, то как отображать сообщения в двух ActionMessages объектах отдельно.

Ответы [ 2 ]

17 голосов
/ 08 марта 2010

Простой,

Разделите ваши messages и ваши warnings: в ваших действиях на стойках сохраните свои сообщения и предупреждения следующим образом:

//For messages
saveMessages(request, messages);

//For warnings
saveErrors(request, warnings);

Чтобы отобразить их:

<logic:messagesPresent message="true">
    <html:messages id="aMsg" message="true">
        <logic:present name="aMsg">
            <!-- Messages -->
            <div class="messages">
                <bean:write name="aMsg" filter="false" />
            </div>
        </logic:present>
    </html:messages>
</logic:messagesPresent>

<logic:messagesPresent message="false">
    <html:messages id="aMsg" message="false">
        <logic:present name="aMsg">
            <!-- Warnings-->
            <div class="warnings">
                <bean:write name="aMsg" filter="false" />
            </div>
        </logic:present>
    </html:messages>
</logic:messagesPresent>

Отображает все messages (путем установки message="true")

<html:messages id="aMsg" message="true">

Здесь отображаются все warnings (путем установки message="false")

<html:messages id="aMsg" message="false">

ОБНОВЛЕНИЕ Учитывая, что вы сейчас проясняете свой вопрос, самый простой способ - это сделать.

Имейте определенный флаг, который укажет, хочет ли пользователь просмотреть messages или warnings. В Struts Action запросите флаг и проверьте, выбрал ли пользователь просмотр сообщений или предупреждений. Затем вы сохраняете warnings или messages в зависимости от выбора пользователя и отображаете ту же страницу (как вы написали выше) для отображения сообщений.

Причина в том, что Struts (при хранении ваших сообщений или ошибок) сохраняет его по запросу или в сеансе со следующей константой.

  • Globals.MESSAGE_KEY (назначается, когда вы делаете saveMessages(request, messages))
  • Globals.ERROR_KEY (назначается, когда вы делаете saveErrors(request, errors))

при использовании <logic:messagesPresent message="true"> Struts ищет MESSAGE_KEY (если message = true) или ERROR_KEY (если message = false) или оба (если message = none). Вы не можете это контролировать.

<html:messages /> Комментарии TLD гласят:

По умолчанию тег будет извлекать боб будет перебирать из Globals.ERROR_KEY константная строка,
но если этот атрибут установлен в «истина» боб будет извлечен из Globals.MESSAGE_KEY константная строка. Также, если для этого параметра установлено значение «true», любой значение, присвоенное атрибуту имени будет игнорироваться.

Вы также можете написать скриптлет, чтобы проверить, существуют ли эти ключи, а затем <logic:iterate /> через клавишу для отображения сообщений (но это будет слишком много работы).

Надеюсь, это поможет.

3 голосов
/ 08 марта 2010

Вместо использования атрибута message в тегах messagesPresent и messages можно использовать атрибут name, чтобы указать имя объекта ActionMessages, имеющегося в области страницы, запроса, сеанса или приложения.

...