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");
не получаеться юзать ViewObject
Мне то всего навсего нужно вытянуть пароль с базы для данного логина.
Короче вот кусок кода, который я никак не могу заставить работать.
Кидаю, чтобы видели, как много вариантов я перепробовал
Код:
А откуда этот метод знает, какой ApplicationModule
мне нужен? Не откуда. Он не знает. Потому getApplicationModule()
и возвращает ApplicationModule, который не
может выполнить нужные действия.
Код:
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", "");
}
}
}
{
// 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", "");
}
}
}
сильно плох в том плане, что я создаю ViewObject,
а не привязываюсь к тому, что юзается на странице.
Как привязаться к тому, что юзается на странице?
В данном случае это не критично,
но на для другой страницы мне нужно настроить её ViewObject,
потому как он должен отображать только строки,
удовлетворяющие условию, которое динамически формирует пользователь.
И может кто-нить знает форум, где выше вероятность
получить ответ на данный вопрос ?
Есть 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
"изменять пока инсерт".
А вот это при самом инсерте:
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)