forum.bitel.ru http://forum.bitel.ru/ |
|
6.0 Правка layout.xsl http://forum.bitel.ru/viewtopic.php?f=22&t=8451 |
Страница 1 из 1 |
Автор: | lda [ 12 сен 2013, 16:11 ] |
Заголовок сообщения: | 6.0 Правка layout.xsl |
Ув. разработчики пытаюсь в ЛК рядом с номером договора разместить текущий баланс договора, так что бы текущий баланс выл виден при выборе любого пункта меню. Для этого редактирую layout.xsl. Однако это файл обрабатывается не всегда, все зависит от того какой пункт меню в ЛК выбран. Например если выбрать пункт "Новости" то текущий баланс не выводится, а если выбрать меню "Смена тарифных планов" - то выводится. Прошу подсказать что делать? |
Автор: | dimOn [ 12 сен 2013, 16:16 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
вообще оно всегда используется, но там часть на jsp переписана, вроде бы. наверно и там надо менять всё |
Автор: | lda [ 12 сен 2013, 16:52 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Ясно, а не подскажите как выполнить sql запрос в jsp? |
Автор: | skn [ 12 сен 2013, 18:15 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
lda писал(а): Ясно, а не подскажите как выполнить sql запрос в jsp? ну как то так - http://javatutor.net/articles/jstl-patt ... lication-3 хотя там сложноватый вариант описан |
Автор: | lda [ 12 сен 2013, 22:47 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Все оказалось не так страшно. Не знаю конечно правильно я сделал или нет. Главное что работает ![]() В общем если кому надо, я сделал так: Написал java класс: Код: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package my; import bitel.billing.server.contract.bean.BalanceUtils; import java.sql.Connection; import java.util.Date; import ru.bitel.bgbilling.server.util.ServerUtils; import ru.bitel.bgbilling.server.util.Setup; /** * * @author lda */ public class MyBean { private String balance = "0"; private String cid = new String(); public void setCid(String cid) { this.cid = cid; } public String getBalance() { Setup setup = Setup.getSetup(); Connection con = setup.getDBConnectionFromPool(); try{ balance = new BalanceUtils(con).getBalance(new Date(), Integer.parseInt(cid)).toString(); }catch (Exception e){ e.printStackTrace(); }finally{ ServerUtils.closeConnection(con); } return balance; } } В webexecuter.jsp вызвал это класс и указал cid: Код: <body> <div id="all"> <!-- logo --> <div class="header"><div class="logo"></div></div> <!-- end logo --> <!-- title --> <c:if test="${not empty contract}"> <jsp:useBean id="mybean" class="my.MyBean" scope="page" > <jsp:setProperty name="mybean" property="cid" value="${contract.id}" /> </jsp:useBean> </c:if> В нем же получил баланс: Код: Текущий баланс:
<jsp:getProperty name="mybean" property="balance" /> |
Автор: | Bazhutyan [ 19 сен 2013, 06:36 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Потребовалось управлять отображением пунктов web-меню. Конкретно - выводить пункт смены пароля логина PPPoE при наличии данного активного сервиса на договоре. Тоже решил написать свой класс: Код: public class myUtils { private int INET_MID = 1; public boolean isPPPoE(String cid) { Setup setup = Setup.getSetup(); Connection con = setup.getDBConnectionFromPool(); boolean isPPPoEfound = false; try{ ServerContext context = new ServerContext(setup, INET_MID, 0); InetServService inetServService = (InetServService)context.getService(InetServService.class, INET_MID); List<InetServ> servList = inetServService.inetServList(Integer.parseInt(cid)); for(Iterator iterator = servList.iterator(); iterator.hasNext();) { InetServ inetServ = (InetServ)iterator.next(); if( !inetServ.getLogin().isEmpty() && inetServ.getAddressTo() == null && (inetServ.getDateTo() == null || TimeUtils.dateBeforeOrEq(new Date(), inetServ.getDateTo()))) { isPPPoEfound = true; break; } } }catch (Exception e){ e.printStackTrace(); }finally{ ServerUtils.closeConnection(con); } return isPPPoEfound; } public boolean isPPPoE(int cid) { return isPPPoE(Integer.toString(cid)); } } Этот вариант не заработал. При выполнении ругается на java.lang.NullPointerException вызванной InetServService inetServService = (InetServService)context.getService(InetServService.class, INET_MID); Не знаю почему, победить не смог, может подскажет кто? Если класс вызвать в "Управлении дин.кодом", то работает, а при вызове из jsp - ошибка. Пришлось переписать и использовать InetServDao для получения сервисов на договоре: Код: InetServDao inetServDao = new InetServDao(con, INET_MID, 0); List<InetServ> servList = inetServDao.list(Integer.parseInt(cid)); Изменил файл webroot/WEB-INF/jspf/include/menu_main.jsp следующим образом: Код: <%@ page contentType="text/html; charset=UTF-8"%> <%@ include file="/WEB-INF/jspf/include/taglibs.jsp"%> <%@ page import="myUtils" %> <% myUtils mu = new myUtils(); %> <div class="menu"> <p>Меню</p> <ul> <c:forEach var="menuItem" items="${menuItemList}"> <c:choose> <c:when test="${contract.balanceMode == 0 and menuItem.action eq 'ContractLimit'}"> </c:when> <c:when test="${menuItem.action eq 'ChangeLoginPassword'}"> <% if( mu.isPPPoE((Integer)session.getAttribute("contract_data_cid")) ) { %> <li><a href="?action=${menuItem.action}&mid=${menuItem.moduleId}&module=${menuItem.module}&contractId=${contract.id}">${menuItem.title}</a></li> <% } %> </c:when> <c:otherwise> <li><a href="?action=${menuItem.action}&mid=${menuItem.moduleId}&module=${menuItem.module}&contractId=${contract.id}">${menuItem.title}</a></li> </c:otherwise> </c:choose> </c:forEach> <li><a onClick="return confirm('Покинуть страницу статистики?');" href="?action=Exit&mid=contract">Выход</a></li> </ul> </div> Еще одна проблема - приходится самому компилировать класс, засовывать его в jar и кидать в lib/app, иначе почему-то не работает, ругается: java.lang.NoClassDefFoundError: myUtils В предыдущем посте в примере использовали jsp:useBean. А я вроде как использовал скриплеты JSP. Может кто знающий посоветует, что лучше использовать? |
Автор: | lda [ 19 сен 2013, 10:18 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Я вообще не использую дин.код, мне удобнее писать свою библиотеку. Во первых это удобнее, а во вторых не везде можно вызвать класс из дин. кода. |
Автор: | lda [ 25 май 2017, 00:04 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Обновляюсь на 7.0. Вызываю класс: Код: <c:if test="${not empty contract}"> <jsp:useBean id="layout_bean" class="ru.plague.billing.jsp.LayoutBean" scope="page" > <jsp:setProperty name="layout_bean" property="cid" value="${contract.id}" /> </jsp:useBean> </c:if> он вызывается, но не может найти класс: Код: Caused by: java.lang.ClassNotFoundException: ru.bitel.bgbilling.server.util.Setup at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 76 more В 6.0 все работало. Как в 7.0. либо вызвать свой класс, либо выполнить sql запрос и вывести результат? |
Автор: | lda [ 25 май 2017, 23:38 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
Разобрался сам. В 6.0 свою библиотеку кидал в lib/ext. В 7.0 заработало только когда положил в lib/app. Почему так? |
Автор: | dimOn [ 26 май 2017, 02:33 ] |
Заголовок сообщения: | Re: 6.0 Правка layout.xsl |
потому что lib/ext не находится в класспатхах, полагаю |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |