forum.bitel.ru http://forum.bitel.ru/ |
|
Не работает скрипт http://forum.bitel.ru/viewtopic.php?f=19&t=4492 |
Страница 1 из 1 |
Автор: | Виталий [ 31 авг 2010, 02:02 ] |
Заголовок сообщения: | Не работает скрипт |
Здравствуйте, написал такой скрипт: Цель его: проверить состоит ли пользователь в заданных группах Код: import java.util.List; import javax.security.auth.Subject; import java.security.AccessController; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; // получает текущего пользователя, вошедшего в ЛК public static User getCurrentUser() { Subject subject = Subject.getSubject(AccessController.getContext()); if (subject != null) { for (UserPrincipal userPrincipal : subject .getPrincipals(UserPrincipal.class)) { return userPrincipal.getUser(); } } return null; } // проверяет состоит ли пользователь во всех группах // @param groupsNames - названия групп public static String consistAtGroups(String... groupsNames) { User user = getCurrentUser(); if (user!=null){ getContext().log.info("user.name = "); List<Integer> groups = user.getUserGroups(); Integer id; for (String name:groupsNames){ id = getGroupIDByName(name); if (id!=-1) if(!groups.contains(id)) return "false"; else return "false"; } return "true"; } getContext().log.info("user = null"); return "false"; } // выдает id группы по ее имени // @param name - название группы public static int getGroupIDByName(String name) { int id = -1; String query = "SELECT id FROM bgs_group WHERE title=?"; ResultSet rs = null; try{ PreparedStatement st = getContext().con.prepareStatement(query); st.setString(1,name); rs = st.executeQuery(); if (rs.next()) id = rs.getInt(1); } catch(SQLException ex){ getContext().log.error(ex.getMessage()); } finally{ if (rs!=null) try { rs.close(); } catch (SQLException e) {} } return id; } Добавил его в свою библиотеку скриптов myscriptlib. Теперь в зависимоти от этого нужно выводить в Web-интерфейсе ЛК пункт меню. Добавил в layout.xsl следующее: ну это как в инструкции: Код: xmlns:svg="http://www.w3.org/2000/svg" xmlns:xalan="http://xml.apache.org/xalan" xmlns:setup="bitel.billing.server.util.exslt.ConfigReader"> <xalan:component prefix="setup" functions="getValue"> <xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.ConfigReader"/> </xalan:component> даллее добавил в шаблон меню: Код: <xsl:choose> <xsl:variable name = "consistAtGroups"><xsl:value-of select="script:invoke('myscriptlib','consistAtGroups','admins','guests')" /></xsl:variable> <xsl:when test="'true'=$consistAtGroups"> <tr> <th><img src="img/strelki.gif"/></th> <td><a href="?action=MyAction&mid=contract">Мое действие</a></td> </tr> </xsl:when> </xsl:choose> Но ничего, не проиходит, в логи ничего не попадает. Так же пробовал задавать шаблое так: Код: <xsl:choose> <xsl:variable name = "consistAtGroups" select ="script:invoke('myscriptlib','consistAtGroups','admins','guests')"></xsl:variable> <xsl:when test="'true'=$consistAtGroups"> <tr> <th><img src="img/strelki.gif"/></th> <td><a href="?action=MyAction&mid=contract">Мое действие</a></td> </tr> </xsl:when> </xsl:choose> тоже ничего. Где ошибка? |
Автор: | Администратор [ 31 авг 2010, 10:49 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть? |
Автор: | Виталий [ 31 авг 2010, 14:30 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Цитата: Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть? Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть? Не выводится ничего. Если объявления переменной вынести на вверх шаблона (после объявления наймспейсов) то аообще пишет Error XSLT file. Видно я все же как то не правильно вызываю скрипт. В консоль кстати выводится ошибка какая-то: Код: file:/C:/BGBillingServer/webroot/xsl/layout.xsl; ═юьхЁ ёЄЁюъш647; ═юьхЁ ёЄюысЎр1 15; xsl:variable эхфюяєёЄшью т фрээющ яючшЎшш ЄрсышЎ√ ёЄшыхщ! ; SystemID: file:/C:/BGBillingServer/webroot/xsl/layout.xsl; Line#: 646; Column# : 13 javax.xml.transform.TransformerException: ─ы xsl:choose эхюсїюфшь xsl:when at org.apache.xalan.transformer.MsgMgr.error(MsgMgr.java:309) at org.apache.xalan.transformer.MsgMgr.error(MsgMgr.java:195) at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:148) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr ansformerImpl.java:2411) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:392 ) at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate. java:246) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr ansformerImpl.java:2411) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResul t.java:1374) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr Но в логе ее нет. |
Автор: | Администратор [ 31 авг 2010, 15:00 ] |
Заголовок сообщения: | Re: Не работает скрипт |
В локали какая кодировка указана? Посмотрите лог в этой кодировке. |
Автор: | Виталий [ 31 авг 2010, 17:21 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Цитата: В локали какая кодировка указана? Посмотрите лог в этой кодировке. Незнаю, а как глянуть? Наверное в консоль выводится в cp1251 а должна в сp866. Смотрел текст в cp1251, кразозябры не исправились. |
Автор: | snark [ 03 сен 2010, 15:51 ] |
Заголовок сообщения: | Re: Не работает скрипт |
чтобы глянуть здесь и сейчас поиграйтесь Код: cat file.log | iconv -f <кодировка файла> -t <кодировка консоли> ну а вообще добавьте в скрипт запуска параметр Код: -Dfile.encoding=Cp1251 и тогда у Вас файлы всегда будут писаться в ср1251 |
Автор: | Виталий [ 04 сен 2010, 02:10 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Указал cpp866 и вместо кразозябр вот что: Код: file:/C:/BGBillingServer/webroot/xsl/layout.xsl; Номер строки646; Номер столбца3 9; xsl:variable недопустимо в данной позиции таблицы стилей! ke(StandardContextValve.java:191) т.е. нельзя объявлять переменную внутри <xsl:choose></xsl:choose>? Сделал так: Код: <xsl:choose> <xsl:when test="'true'= <xsl:value-of select="script:invoke('myscriptlib','admins')/>" <tr> <th><img src="img/strelki.gif"/></th> <td><a href="?action=MyAction&mid=contract">Мое действие</a></td> </tr> </xsl:when> </xsl:choose> тоже не работает. Напишите кто-нибудь как правильно сделать? |
Автор: | snark [ 04 сен 2010, 19:45 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Виталий писал(а): Указал cpp866 для БГБ родная кодировка ср1251 ![]() Виталий писал(а): Сделал так: Код: <xsl:choose> <xsl:when test="'true'= <xsl:value-of select="script:invoke('myscriptlib','admins')/>" <tr> <th><img src="img/strelki.gif"/></th> <td><a href="?action=MyAction&mid=contract">Мое действие</a></td> </tr> </xsl:when> </xsl:choose> тоже не работает. Напишите кто-нибудь как правильно сделать? должно быть как то так: Код: <xsl:choose>
<xsl:when test="'true'"> <xsl:value-of select="script:invoke('myscriptlib','admins')" /> </xsl:when> </xsl:choose> |
Автор: | Виталий [ 04 сен 2010, 20:56 ] |
Заголовок сообщения: | Re: Не работает скрипт |
Цитата: для БГБ родная кодировка ср1251 Я знаю. Я специально указал cp866 чтобы русские буквы нормально выводились. Теперь пишет, что не может найти библиотеку myscriptlib. Как проверить что она установилась на сервере? Когда захожу через клиент она там есть. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |