forum.bitel.ru http://forum.bitel.ru/ |
|
Как добавить свой Action? http://forum.bitel.ru/viewtopic.php?f=49&t=12933 |
Страница 1 из 1 |
Автор: | Dog [ 24 июн 2018, 17:12 ] |
Заголовок сообщения: | Как добавить свой Action? |
Решил добавить форму(возможность привязывать к процессу устройство): Код: [/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) |
Автор: | Dog [ 24 июн 2018, 17:26 ] |
Заголовок сообщения: | Re: Как добавить свой Action? |
если подсовывать класс в компилированном 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) похоже что не пролезло в каком то фильтре? |
Автор: | Администратор [ 25 июн 2018, 00:28 ] |
Заголовок сообщения: | Re: Как добавить свой Action? |
Проще всего добавить свой плагин. Закиньте XML с объявлением в webapps/plugin. В webapps/WEB-INF есть отдельные файлы для Struts акшенов. Динамический код там загрузить пока не получится, но можно скопилировать и подсунуть свой jar в lib. Исходники открыть помогло бы в изучении? |
Автор: | Dog [ 25 июн 2018, 00:35 ] |
Заголовок сообщения: | Re: Как добавить свой Action? |
в общем да: 1. надо было компилировать (причем всё что импоритируется в классах) 2. писать в филтрах: Код: <item title="Устройства"> <item action="ru.ххх.bgcrm.itsm.plugin.bgbilling.struts.action.ExtContractAction:addProcessInetDeviceLink" title="Привязка устройства к процессу"/> </item> все работает. |
Автор: | Dog [ 25 июн 2018, 00:38 ] |
Заголовок сообщения: | Re: Как добавить свой Action? |
Администратор писал(а): Проще всего добавить свой плагин. Закиньте XML с объявлением в webapps/plugin. В webapps/WEB-INF есть отдельные файлы для Struts акшенов. Динамический код там загрузить пока не получится, но можно скопилировать и подсунуть свой jar в lib. Исходники открыть помогло бы в изучении? пока справляюсь без исходников. в принципе структура и идеалогия как это работает понятна. пока тренируюсь на простом. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |