Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не получаеться юзать ViewObject

1.0K
01 июня 2007 года
diesel_den
169 / / 22.12.2005
Oracle JDeveloper, ADF BC+Struts+JSP.
Мне то всего навсего нужно вытянуть пароль с базы для данного логина.
Короче вот кусок кода, который я никак не могу заставить работать.
Кидаю, чтобы видели, как много вариантов я перепробовал
Код:
protected void findForward(DataActionContext actionContext) throws Exception
  {
      DCBindingContainer bindings = actionContext.getBindingContainer();
      ApplicationModule appMod = bindings.getDataControl().getApplicationModule();
      System.out.println(appMod.toString());
      //ApplicationModule appMod = bindings.getApplicationModule();
      /*String[] voNames = appMod.getViewObjectNames(true, true);
      for (int i = 0; i < voNames.length; i++)
      {
        System.out.println("" + i + voNames);
      }*/
      //AuthentificationPackage.
      ViewObject vo = appMod.createViewObject("Auth0010UsersViewObject1", "AuthentificationPackage.Auth0010UsersViewObject");
      //Auth0010UsersViewObjectImpl vo = (Auth0010UsersViewObjectImpl)appMod.findViewObject("Auth0010UsersViewObject");
      //ViewObject vo1 = appMod.findViewObject("AuthentificationPackage.Auth0010UsersViewObject");
      //ViewObjectImpl vo = (ViewObjectImpl)appMod.findViewObject("Auth0010UsersViewObject");
      vo.setWhereClause(" Login = " + login + " ");
      vo.executeQuery();
      //System.out.println(vo);
      //System.out.println(vo.getQuery());
      //System.out.println(vo.getAttributeCount());
      //System.out.println(vo.hasNext());
      //System.out.println(vo.first());
      Row row = vo.getCurrentRow();
      password2 = (String)row.getAttribute("Password");
1.0K
01 июня 2007 года
diesel_den
169 / / 22.12.2005
Ответ простой:
А откуда этот метод знает, какой ApplicationModule
мне нужен? Не откуда. Он не знает. Потому getApplicationModule()
и возвращает ApplicationModule, который не
может выполнить нужные действия.
1.0K
01 июня 2007 года
diesel_den
169 / / 22.12.2005
Вот рабочий вариант:
Код:
public class AuthentificationAction extends DataForwardAction
{
  // To handle an event named "yourname" add a method:
  // public void onYourname(DataActionContext ctx)

  // To override a method of the lifecycle, go to
  // the main menu "Tools/Override Methods...".

  static ApplicationModule m_appMod;
  static ViewObject m_vo;

  protected void findForward(DataActionContext actionContext) throws Exception
  {
    // TODO:  Override this oracle.adf.controller.struts.actions.DataAction method
    super.findForward(actionContext);

    DCBindingContainer bindings = actionContext.getBindingContainer();
    DCControlBinding binding = bindings.findCtrlBinding("Login");
    String login = (binding != null) ? binding.toString() : "";

    binding = bindings.findCtrlBinding("Password");
    String password = (binding != null) ? binding.toString() : "";

    if (m_appMod == null)
    {
      String qualifiedAMDefName = "AuthentificationPackage.AuthentificationAppModule";
      String configName = "AuthentificationAppModuleLocal";
      m_appMod = (ApplicationModule)Configuration.
        createRootApplicationModule(qualifiedAMDefName, configName);
    }

    if (!login.equals("")) {
      if (m_vo == null)
        m_vo = m_appMod.createViewObject("Auth0010UsersViewObject1", "AuthentificationPackage.Auth0010UsersViewObject");
      String keyValues[] = { login };
      Key key = new Key( keyValues );
      Row row = m_vo.getRow(key);
      String password2 = (String)row.getAttribute("Password");
      System.out.println("password2: " + password2);
      if (!password.equals(password2)) {
        System.out.println("password: " + password);
        ActionMessages messages = new ActionMessages();
        messages.add("feedback", new ActionMessage("message.login.error"));
        saveMessages(actionContext.getHttpServletRequest(), messages );
      }
      else
        actionContext.getHttpServletRequest().getSession().
          setAttribute("isLogged", "");
    }
  }

}
1.0K
05 июня 2007 года
diesel_den
169 / / 22.12.2005
Приведённый рабочий вариант
сильно плох в том плане, что я создаю ViewObject,
а не привязываюсь к тому, что юзается на странице.
Как привязаться к тому, что юзается на странице?
В данном случае это не критично,
но на для другой страницы мне нужно настроить её ViewObject,
потому как он должен отображать только строки,
удовлетворяющие условию, которое динамически формирует пользователь.
И может кто-нить знает форум, где выше вероятность
получить ответ на данный вопрос ?
1.0K
09 июня 2007 года
diesel_den
169 / / 22.12.2005
На этом мои мучения не закончились:

Есть ViewObject vo, из которого всё нормально селектиться.
После этого пишу:
Row row = vc.createRow();
row.setAttribute("Login", login); //String
row.setAttribute("EnterDate", new java.sql.date("2007-06-06"));
vo.insertRow(row);
И имею два экзепшина:
1) Login is ReadOnly (хотя там у всеч столбцов стоит Updetable while insert)
2) Persistent Id = 0, must be > 0. Я сначала подумал, что речь идёт о примари кей,
но после разных проверок понимаю, что речь идёт о чём то другом.
наверно про номер данной строки в кеше ожидания вставки в буфер...
Вообще я читал про ORM(Hibernate, EJB 3.0), так что понимаю, что такое
persistent, а что такое detached.

Вот первый стектрейс:
oracle.jbo.ReadOnlyAttrException: JBO-27008: Сбой установки значения атрибута для Login в объекте представления UserLogsViewUsage
at oracle.jbo.AttrValException.<init>(AttrValException.java:113)
at oracle.jbo.ReadOnlyAttrException.<init>(ReadOnlyAttrException.java:40)
at oracle.jbo.client.remote.RowImpl.setAttribute(RowImpl.java:537)
at oracle.jbo.client.remote.RowImpl.setAttribute(RowImpl.java:703)
at view.AuthenticationAction.findForward(AuthenticationAction.java:113)
at oracle.adf.controller.struts.actions.DataAction.findForward(DataAction.java:565)
at oracle.adf.controller.lifecycle.PageLifecycle.handleLifecycle(PageLifecycle.java:164)
at oracle.adf.controller.struts.actions.DataAction.handleLifecycle(DataAction.java:223)
at oracle.adf.controller.struts.actions.DataAction.execute(DataAction.java:155)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1485)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:527)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source)
at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:239)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:659)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
at java.lang.Thread.run(Thread.java:534)
07.06.2007 19:26:12 org.apache.struts.action.RequestProcessor processException
WARNING: Unhandled Exception thrown: class oracle.jbo.ReadOnlyAttrException
1.0K
09 июня 2007 года
diesel_den
169 / / 22.12.2005
То при установке значения атрибута, для которого стоит опция
"изменять пока инсерт".
А вот это при самом инсерте:
oracle.jbo.PCollException: JBO-28035: Постоянный идентификатор 0 для коллекции UserLogsViewUsage является недопустимым, идентификатор коллекции 0. Должен быть > 0
at oracle.jbo.PCollException.throwException(PCollException.java:39)
at oracle.jbo.pcoll.PCollection.elementWithId(PCollection.java:830)
at oracle.jbo.server.QueryCollection.getRowStorageFromId(QueryCollection.java:1276)
at oracle.jbo.server.ViewObjectImpl.findRowInQCs(ViewObjectImpl.java:11246)
at oracle.jbo.server.remote.RuntimeViewRowSetIteratorInfo.getRowFromKey(RuntimeViewRowSetIteratorInfo.java:501)
at oracle.jbo.server.remote.RuntimeViewRowSetIteratorInfo.getRowForSvcMsg(RuntimeViewRowSetIteratorInfo.java:471)
at oracle.jbo.server.remote.RuntimeViewRowSetIteratorInfo.processChanges(RuntimeViewRowSetIteratorInfo.java:367)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.postRows(AbstractRemoteApplicationModuleImpl.java:3433)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.processSvcMsgRequest(AbstractRemoteApplicationModuleImpl.java:3480)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.processSvcMsgEntries(AbstractRemoteApplicationModuleImpl.java:4129)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.readServiceMessage(AbstractRemoteApplicationModuleImpl.java:3389)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.processMessage(AbstractRemoteApplicationModuleImpl.java:1859)
at oracle.jbo.server.ApplicationModuleImpl.doMessage(ApplicationModuleImpl.java:7355)
at oracle.jbo.server.remote.AbstractRemoteApplicationModuleImpl.sync(AbstractRemoteApplicationModuleImpl.java:1825)
at oracle.jbo.server.remote.colo.ServerApplicationModuleImpl.doMessage(ServerApplicationModuleImpl.java:263)
at oracle.jbo.common.colo.ColoApplicationModuleImpl.doMessage(ColoApplicationModuleImpl.java:103)
at oracle.jbo.client.remote.ApplicationModuleImpl.doMessage(ApplicationModuleImpl.java:6375)
at oracle.jbo.client.remote.PooledRequestHandler.doMessage(PooledRequestHandler.java:130)
at oracle.jbo.client.remote.ApplicationModuleImpl.doMessage(ApplicationModuleImpl.java:6375)
at oracle.jbo.client.remote.ApplicationModuleImpl.sendServiceMessage(ApplicationModuleImpl.java:1100)
at oracle.jbo.client.remote.ApplicationModuleImpl.sendServiceMessage(ApplicationModuleImpl.java:1114)
at oracle.jbo.client.remote.ApplicationModuleImpl.sendWorkingSetRequests(ApplicationModuleImpl.java:3497)
at oracle.jbo.common.ws.WSApplicationModuleImpl.sendRequests(WSApplicationModuleImpl.java:1119)
at oracle.jbo.common.ws.WSApplicationModuleImpl.sync(WSApplicationModuleImpl.java:1034)
at oracle.jbo.common.ws.WSApplicationModuleImpl.endRequest(WSApplicationModuleImpl.java:2658)
at oracle.adf.model.bc4j.DCJboDataControl.endRequest(DCJboDataControl.java:1283)
at oracle.adf.model.servlet.ADFBindingFilter.invokeEndRequest(ADFBindingFilter.java:300)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:249)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:659)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
at java.lang.Thread.run(Thread.java:534)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог