BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 19:39

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как добавить свой Action?
СообщениеДобавлено: 24 июн 2018, 17:12 
Не в сети
Клиент

Зарегистрирован: 21 сен 2009, 13:01
Сообщения: 835
Откуда: Москва
Карма: 15
Решил добавить форму(возможность привязывать к процессу устройство):

Код:
[/BGCRM/webapps/WEB-INF/jspf/user/plugin/bgbilling/custom]# cat process_link_for_add_custom_list.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="/WEB-INF/jspf/taglibs.jsp"%>

<c:set var="plugin" value="${ctxPluginManager.pluginMap['bgbilling']}"/>

<c:forEach var="billing" items="${plugin.dbInfoManager.dbInfoList}">
        <c:set var="id" value="bgbilling-${billing.id}"/>

        <c:set var="linkObjectItems" scope="request">
                ${linkObjectItems}
                <li value="${id}">Договор: ${billing.title}</li>

                <li value="${id}-inetDevice">Устройство: ${billing.title}</li>

        </c:set>
        <c:set var="linkObjectForms" scope="request">
                ${linkObjectForms}
                <form action="/user/plugin/bgbilling/contract.do" id="${id}" style="display: none;">
                        <input type="checkbox" name="check" style="display: none;"/>
                        <input type="hidden" name="processId" value="${form.id}"/>
                        <input type="hidden" name="billingId" value="${billing.id}"/>
                        <input type="hidden" name="action" value="addProcessContractLink"/>
                        <input style="width: 100%;" name="contractTitle" placeholder="Номер договора"/>
                </form>

                <form action="/user/plugin/bgbilling/custom/contract.do" id="${id}-inetDevice" style="display: none;">
                        <input type="checkbox" name="check" style="display: none;"/>
                        <input type="hidden" name="processId" value="${form.id}"/>
                        <input type="hidden" name="billingId" value="${billing.id}"/>
                        <input type="hidden" name="action" value="addProcessInetDeviceLink"/>
                        <input style="width: 100%;" name="devId" placeholder="ID устройтва"/>
                        <%--
                        <input style="width: 100%;" name="devIp" placeholder="IP устройтва"/>
                        --%>
                </form>

        </c:set>
</c:forEach>

Код:
<!-- Custom link device -->
<action path="/user/plugin/bgbilling/custom/contract" parameter="action" type="ru.bgcrm.dyn.itsm.plugin.bgbilling.struts.action.ExtContractAction" name="form" scope="request">
             <forward name="default" path="/WEB-INF/jspf/user/plugin/bgbilling/contract.jsp"/>
</action>
<!-- Custom -->


есть класс с экшеном:

Код:
package ru.bgcrm.dyn.itsm.plugin.bgbilling.struts.action;

...

public class ExtContractAction extends ContractAction {

   /**
    *
    */
   public ExtContractAction() {
      super();
   }
   
   /*
    * Добавляем привязку устройства к процессу.
    *
    * @param mapping
    * @param form
    * @param request
    * @param response
    * @param con
    * @return
    *
    * @throws BGException
    */
   public ActionForward addProcessInetDeviceLink(ActionMapping mapping, DynActionForm form, HttpServletRequest request,
         HttpServletResponse response, Connection con) throws BGException {
      String billingId = form.getParam("billingId");
      int processId = form.getParamInt("processId");
      int deviceId = form.getParamInt("devId");
      // String devIp = form.getParam("devIp");

      if ((Utils.isBlankString(billingId)) || (processId <= 0)
            || (deviceId <= 0) /* || Utils.validateIPv4(devIp) */ ) {
         throw new BGIllegalArgumentException();
      }
      User user = form.getUser();
      ExtInetDAO inetDao = new ExtInetDAO(user, billingId);
      InetDevice inetDevice = inetDao.getDevice(deviceId);

      CommonObjectLink link = new CommonObjectLink("process", processId, "device:" + billingId, inetDevice.getId(),
            inetDevice.getTitle());
      LinkAction.addLink(form, con, link);

      return processJsonForward(con, form, response);
   }
}



в итоге при изменении прилетает:

Код:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.ClassNotFoundException: ru.bgcrm.dyn.itsm.plugin.bgbilling.struts.action.ExtContractAction
   org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
   org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
   ru.bgcrm.servlet.filter.SetRequestParamsFilter.doFilter(SetRequestParamsFilter.java:46)
   ru.bgcrm.servlet.filter.AuthFilter.doFilter(AuthFilter.java:115)
   ru.bgcrm.servlet.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
root cause

java.lang.ClassNotFoundException: ru.bgcrm.dyn.itsm.plugin.bgbilling.struts.action.ExtContractAction
   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
   org.apache.struts.chain.commands.util.ClassUtils.getApplicationClass(ClassUtils.java:54)
   org.apache.struts.chain.commands.util.ClassUtils.getApplicationInstance(ClassUtils.java:71)
   org.apache.struts.chain.commands.servlet.CreateAction.createAction(CreateAction.java:98)
   org.apache.struts.chain.commands.servlet.CreateAction.getAction(CreateAction.java:68)
   org.apache.struts.chain.commands.AbstractCreateAction.execute(AbstractCreateAction.java:91)
   org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
   org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
   org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
   org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
   org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
   org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
   ru.bgcrm.servlet.filter.SetRequestParamsFilter.doFilter(SetRequestParamsFilter.java:46)
   ru.bgcrm.servlet.filter.AuthFilter.doFilter(AuthFilter.java:115)
   ru.bgcrm.servlet.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как добавить свой Action?
СообщениеДобавлено: 24 июн 2018, 17:26 
Не в сети
Клиент

Зарегистрирован: 21 сен 2009, 13:01
Сообщения: 835
Откуда: Москва
Карма: 15
если подсовывать класс в компилированном jar'e:

Код:
06-24/14:55:02 ERROR [http-bio-9088-exec-10] ExtContractAction -
java.lang.NullPointerException
        at ru.bgcrm.struts.action.BaseAction.dispatchMethod(BaseAction.java:199)
        at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
        at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
        at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
        at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.SetRequestParamsFilter.doFilter(SetRequestParamsFilter.java:46)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.AuthFilter.doFilter(AuthFilter.java:115)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)


похоже что не пролезло в каком то фильтре?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как добавить свой Action?
СообщениеДобавлено: 25 июн 2018, 00:28 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Проще всего добавить свой плагин. Закиньте XML с объявлением в webapps/plugin.
В webapps/WEB-INF есть отдельные файлы для Struts акшенов.
Динамический код там загрузить пока не получится, но можно скопилировать и подсунуть свой jar в lib.
Исходники открыть помогло бы в изучении?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как добавить свой Action?
СообщениеДобавлено: 25 июн 2018, 00:35 
Не в сети
Клиент

Зарегистрирован: 21 сен 2009, 13:01
Сообщения: 835
Откуда: Москва
Карма: 15
в общем да:

1. надо было компилировать (причем всё что импоритируется в классах)
2. писать в филтрах:

Код:
<item title="Устройства">
    <item action="ru.ххх.bgcrm.itsm.plugin.bgbilling.struts.action.ExtContractAction:addProcessInetDeviceLink" title="Привязка устройства к процессу"/>
</item>


все работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как добавить свой Action?
СообщениеДобавлено: 25 июн 2018, 00:38 
Не в сети
Клиент

Зарегистрирован: 21 сен 2009, 13:01
Сообщения: 835
Откуда: Москва
Карма: 15
Администратор писал(а):
Проще всего добавить свой плагин. Закиньте XML с объявлением в webapps/plugin.
В webapps/WEB-INF есть отдельные файлы для Struts акшенов.
Динамический код там загрузить пока не получится, но можно скопилировать и подсунуть свой jar в lib.
Исходники открыть помогло бы в изучении?


пока справляюсь без исходников. в принципе структура и идеалогия как это работает понятна. пока тренируюсь на простом.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.086s | 30 Queries | GZIP : On ]