forum.bitel.ru
http://forum.bitel.ru/

setMsg в ru.bitel.bgbilling.kernel.base.server.action.Action
http://forum.bitel.ru/viewtopic.php?f=19&t=5474
Страница 1 из 1

Автор:  Cromeshnic [ 13 май 2011, 07:29 ]
Заголовок сообщения:  setMsg в ru.bitel.bgbilling.kernel.base.server.action.Action

В layout.xsl есть конструкция, позволяющая показывать клиенту ошибки и уведомления:
Код:
        <xsl:template name="error">
                <xsl:param name="text"/>
                <xsl:choose>
                        <xsl:when test="$text"><div class="errorMessage"><xsl:value-of select="$text"/></div></xsl:when>
                        <xsl:when test="@status = 'error'">
                                        <div class="errorMessage"><b>Ошибка:</b>&#160;<pre><xsl:value-of select="/data/text()"/></pre></div>
                        </xsl:when>

                        <!-- также сообщения будем тоже рисовать -->
                        <xsl:when test="@status = 'message'">
                                <div class="infoMessage"><xsl:value-of select="/data/text()"/></div>
                        </xsl:when>

                        <!-- Это неверный способ передачи сообщения об ошибке. Постепенно убрать везде где используется в Web акшенах. -->
                        <xsl:otherwise>
                                <xsl:for-each select="/data/error">
                                        <br/>
                                        <div class="errorMessage">
                                                <xsl:for-each select="row">
                                                        <xsl:value-of select="@text"/> <br/>
                                                </xsl:for-each>
                                        </div>
                                </xsl:for-each>

                                <xsl:for-each select="/data/message">
                                        <br/>
                                        <div class="infoMessage">
                                                <xsl:for-each select="row">
                                                        <xsl:value-of select="@text"/> <br/>
                                                </xsl:for-each>
                                        </div>
                                </xsl:for-each>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>


В старых экшенах, наследованных от bitel.billing.server.ActionBase есть два метода для установки текста ошибки и уведомления:
setWebErrorMessage
setMsg

В новых, наледованных от ru.bitel.bgbilling.kernel.base.server.action.Action такого нет.
Вместо
Код:
setWebErrorMessage(msg);

я должен делать:
Код:
throw new BGMessageException(msg);


Вопрос:
Что я должен написать вместо setMsg(msg) ??

Сделал свой public class ActionCustomTariffOption extends ActionTariffOption, в котором добавляются всякие декоративные плюшки, вроде оставшихся бесплатных минут по опции в день, предполагаемой стоимости подключения, краткого описания и т.п. Попросили выдавать msg при подключении опции, чтобы как-то визуально подтвердить получение бонуса, ага.

Автор:  dimOn [ 13 май 2011, 13:05 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

Нет, вы путаете слегка. Раньше было setErrorStatus и setMsg, которые использовались и в обычных экшенах и в вебовских. Потом в обычных упразднили это и надо делать throw new BGMessageException(msg) или throw new BGException(msg), а для веба оставили, ввиду специфики, но переименовали в setWebErrorMessage. setMsg тоже осталось, кажется...

Автор:  dimOn [ 13 май 2011, 13:08 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

А, вы про ru.bitel.bgbilling.kernel.base.server.action.Action, это называется "новая технология 2" и должна использоваться только в вебе как альтернатива вебсервисам. Там надо также бросать экзепшены. Различий между ошибкой и мессаге, кажется, нету. Это вообще упразднили, в этом и был смысл бросания экзепшенов. В обычных экшенах есть различия между BGException и BGMessageException, первое логгируется второе - нет, оба показываются юзеру. В вебе всё как ошибка уходит. По коду я не нашёл, чтобы у нас где-то использовись передачи информационых сообщений.

Автор:  Cromeshnic [ 13 май 2011, 13:35 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

Ясно, т.е. просто информационных нотификаций не будет :(

зы. Кстати, ещё помнится напрягало, что нельзя текст сообщения поправить - лучше бы дополнительно передавался код ошибки, который в xsl обрабатывался при желании.

Автор:  Администратор [ 16 май 2011, 16:39 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

setMsg это именно информационное сообщение.
Все сообщения об ошибках переделываются на исключения, а информационные сообщения - setMsg.

Автор:  Cromeshnic [ 17 май 2011, 04:08 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

Администратор писал(а):
setMsg это именно информационное сообщение.
Все сообщения об ошибках переделываются на исключения, а информационные сообщения - setMsg.

Так его нету в новом контексте :(

Автор:  Cromeshnic [ 17 май 2011, 08:23 ]
Заголовок сообщения:  Re: setMsg в ru.bitel.bgbilling.kernel.base.server.action.Ac

Сделал воркэраунд:

layout.xsl:
Код:
<xsl:template name="error">
...
      <xsl:if test="/data/common:result/attributes/item[@key='custom_info_message']/value">
         <div class="infoMessage"><xsl:value-of select="/data/common:result/attributes/item[@key='custom_info_message']/value"/></div>
      </xsl:if>
...
</xsl:template>


action:
Код:
...
result.setAttribute("custom_info_message", msg);
...

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/