BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 22 июн 2025, 10:03

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Не работает скрипт
СообщениеДобавлено: 31 авг 2010, 02:02 
Не в сети

Зарегистрирован: 20 авг 2010, 02:15
Сообщения: 8
Карма: 0
Здравствуйте, написал такой скрипт:
Цель его: проверить состоит ли пользователь в заданных группах
Код:
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&amp;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&amp;mid=contract">Мое действие</a></td>
   </tr>   
   </xsl:when>
</xsl:choose>

тоже ничего. Где ошибка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 31 авг 2010, 10:49 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 31 авг 2010, 14:30 
Не в сети

Зарегистрирован: 20 авг 2010, 02:15
Сообщения: 8
Карма: 0
Цитата:
Ну попробуйте просто вывести переменную 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

Но в логе ее нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 31 авг 2010, 15:00 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
В локали какая кодировка указана? Посмотрите лог в этой кодировке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 31 авг 2010, 17:21 
Не в сети

Зарегистрирован: 20 авг 2010, 02:15
Сообщения: 8
Карма: 0
Цитата:
В локали какая кодировка указана? Посмотрите лог в этой кодировке.

Незнаю, а как глянуть? Наверное в консоль выводится в cp1251 а должна в сp866. Смотрел текст в cp1251, кразозябры не исправились.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 03 сен 2010, 15:51 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
чтобы глянуть здесь и сейчас поиграйтесь
Код:
cat file.log | iconv -f <кодировка файла> -t <кодировка консоли>

ну а вообще добавьте в скрипт запуска параметр
Код:
-Dfile.encoding=Cp1251

и тогда у Вас файлы всегда будут писаться в ср1251


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 04 сен 2010, 02:10 
Не в сети

Зарегистрирован: 20 авг 2010, 02:15
Сообщения: 8
Карма: 0
Указал 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&amp;mid=contract">Мое действие</a></td>
     </tr>   
   </xsl:when>
</xsl:choose>

тоже не работает. Напишите кто-нибудь как правильно сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 04 сен 2010, 19:45 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
Виталий писал(а):
Указал 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&amp;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>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает скрипт
СообщениеДобавлено: 04 сен 2010, 20:56 
Не в сети

Зарегистрирован: 20 авг 2010, 02:15
Сообщения: 8
Карма: 0
Цитата:
для БГБ родная кодировка ср1251

Я знаю. Я специально указал cp866 чтобы русские буквы нормально выводились.

Теперь пишет, что не может найти библиотеку myscriptlib. Как проверить что она установилась на сервере? Когда захожу через клиент она там есть.


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

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


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

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


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

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