Потребовалось управлять отображением пунктов 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.
Может кто знающий посоветует, что лучше использовать?