Вопрос

Я демонстрирую ActionMessages через a 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 объекты по отдельности.

Это было полезно?

Решение

Простой,

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

//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 запросите флаг и проверьте, выбрал ли пользователь просмотр сообщений или предупреждений.Затем вы сохраняете либо warnings или messages на основе выбора пользователя и отображения той же страницы (как вы написали выше) для отображения сообщений.

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

  • Глобальные.MESSAGE_KEY (который присваивается при выполнении saveMessages(request, messages))
  • Глобальные переменные.ERROR_KEY (который присваивается при выполнении saveErrors(request, errors))

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

<html:messages /> Состояния комментариев к TLD:

По умолчанию тег извлекает компонент, который он будет повторять из Глобальных переменных.Строка константы ERROR_KEY,
но если для этого атрибута установлено значение 'true' компонент будет извлечен из Глобальных данных.Строка константы MESSAGE_KEY.Также, если для этого параметра установлено значение 'true', любое значение, присвоенное атрибуту name , будет проигнорировано.

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top