Биллинг вер. 4.6
Появилась необходимость добавить свой action в личный кабинет пользователя(Web интерфейс).
На форуме нигде полного решения я не нашел. Хотелось бы собрать все воедино.
Редактируем файл /BGBillingServer/webroot/xsl/main.xsl
Добавляем:
...
<xsl:when test="data/@action = 'MemoTable' or data/@action = 'Memo'">ПРИМЕЧАНИЯ</xsl:when>
<xsl:when test="data/@action = 'test'">TEST</xsl:when> <xsl:otherwise>НОВОСТИ</xsl:otherwise>
...
...
<xsl:when test="@action = 'MemoTable' or @action = 'Memo'">
<xsl:call-template name="Memo"/>
</xsl:when>
<xsl:when test="@action = 'test'">
<xsl:call-template name="Test"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="news"/>
</xsl:otherwise>
...
...
<xsl:otherwise>
<div class="toList"><a href="{$WEBEXECUTER}?action=MemoTable&mid=contract">К списку ...</a></div>
<div class="MemoDate"><!-- <span>Дата:</span> --><xsl:value-of select="/data/memo/@date"/></div>
<div class="MemoTitle"><span>Заголовок:</span> <xsl:value-of select="/data/memo/@title"/></div>
<pre class="MemoText"><xsl:value-of select="/data/memo/@comment"/></pre>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="Test">
<select name="test">
<option value="-1">---</option>
<xsl:for-each select="/data/test/table/row">
<option value="{@id}"><xsl:value-of select="@title"/></option>
</xsl:for-each>
</select>
</xsl:template>
<xsl:template name="news">
<xsl:if test="/data/news/item">
<div id="idDivNews">
<xsl:for-each select="/data/news/item">
<span class="date"><xsl:value-of select="@date"/></span><strong class="newsTitle"><xsl:value-of select="@title"/></strong><br/>^M
<xsl:choose>^M
<xsl:when test="data"><xsl:for-each select="data"><xsl:copy-of select="*|text()"/></xsl:for-each></xsl:when>^M
<xsl:otherwise><xsl:for-each select="div"><xsl:value-of select="."/><br/></xsl:for-each></xsl:otherwise>^M
</xsl:choose>
<br/>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
...
Пишем пакет (файл WebAction_test.java):
Код:
package bitel.billing.server.contract;
import java.sql.SQLException;
import java.util.List;
import org.w3c.dom.Element;
import bitel.billing.server.contract.action.ActionBase;
public class WebAction_test extends ActionBase
{
@Override
public void doAction()
throws SQLException
{
Element test = createElement( rootNode, "test" );
Element table = createElement( test, "table" );
Element element = createElement( table, "row" );
element.setAttribute( "id", String.valueOf( 1 ) );
element.setAttribute( "title", "title1" );
element = createElement( table, "row" );
element.setAttribute( "id", String.valueOf( 2 ) );
element.setAttribute( "title", "title2" );
};
};
Компилим его:
BGBillingServer# /usr/lib/jdk/bin/javac -cp ./:lib/* lda/WebAction_test.java
Получаем файл: WebAction_test.class
Теперь вопрос куда его запихать?
В голову пришло три варианта:
1. Создать ремапинг action.remap_<module>_<action>=mypackage.MyAction
2. Создать отдельную библиотеку(что то вроде test.jar) и положить его в папку lib биллинга
3. Закинуть его в server.jar(/bitel/billing/server/contract)
Я выбрал 3-й вариант, как самый простой, но неверное не самый правильный
Я получил то что хотел. В личном кабинете появился пункт меню "TEST". При выборе этого пункта открывается заполненный комбобокс.
У меня вопрос к разработчикам.
Подскажите как правильно добавлять action? Т.е. как правильно подключить WebAction_test.class?