Jsf 从按钮重定向页面

Jsf 从按钮重定向页面,jsf,jakarta-ee,oracle-adf,jdeveloper,Jsf,Jakarta Ee,Oracle Adf,Jdeveloper,您好,我正在尝试使用oraclejdeveloper12c和开发登录页面。我正在使用JEE技术和JSF页面 我想在按下authentification按钮后重定向到主页面,但它不起作用,我得到以下提示: javax.servlet.ServletException:ADF_FACES-60101:Code de Statutd“erreur HTTP:404。” 这是ejb部分中的身份验证函数 public String authentification(String login, String

您好,我正在尝试使用oraclejdeveloper12c和开发登录页面。我正在使用JEE技术和JSF页面

我想在按下authentification按钮后重定向到主页面,但它不起作用,我得到以下提示:

javax.servlet.ServletException:ADF_FACES-60101:Code de Statutd“erreur HTTP:404。”

这是ejb部分中的身份验证函数

public String authentification(String login, String pwd) {
    try{
        Query query;
        query = em.createQuery("select o from UserEntity o where " 
                + " o.login = :LOGIN AND o.pwd = :PWD");

        query.setParameter("LOGIN",login);
        query.setParameter("PWD",pwd);
        query.getSingleResult();
        return  ("success") ;  
    }
    catch(Exception e){
        e.printStackTrace();
        return null;
    }            
}
这是我在托管bean中的登录

public String loginaction() {
    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletRequest request =
    (HttpServletRequest)ctx.getExternalContext().getRequest();

    String Url =
    "/adfAuthentication?success_url=/faces/Main.jsf";

    HttpServletResponse response;
    response = (HttpServletResponse) ctx.getExternalContext().getResponse();

    RequestDispatcher dispatcher =
    request.getRequestDispatcher(Url);
    try {
        dispatcher.forward(request, response);
    } catch (IOException e) {
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid Username or Password", "Invalid Username or Password");
           ctx.addMessage(null, msg);
    } catch (Exception e) {
          e.printStackTrace();
    }
    return null;
}
这是我的jsf

<af:panelFormLayout id="pfl1">
                        <af:inputText value="#{bindings.login.inputValue}" label="#{bindings.login.hints.label}"
                                      required="#{bindings.login.hints.mandatory}"
                                      columns="#{bindings.login.hints.displayWidth}"
                                      maximumLength="#{bindings.login.hints.precision}"
                                      shortDesc="#{bindings.login.hints.tooltip}" id="it1">
                            <f:validator binding="#{bindings.login.validator}"/>
                        </af:inputText>
                        <af:inputText value="#{bindings.pwd.inputValue}" label="#{bindings.pwd.hints.label}"
                                      required="#{bindings.pwd.hints.mandatory}"
                                      columns="#{bindings.pwd.hints.displayWidth}"
                                      maximumLength="#{bindings.pwd.hints.precision}"
                                      shortDesc="#{bindings.pwd.hints.tooltip}" id="it2">
                            <f:validator binding="#{bindings.pwd.validator}"/>
                        </af:inputText>
                        <af:button actionListener="#{bindings.authentification.execute}" text="authentification"
                                   disabled="#{!bindings.authentification.enabled}" id="b1"
                                   action="#{Login2.loginaction}"/>
                    </af:panelFormLayout>

从日志中,我看到它不仅仅是一个简单的JSF,而是一个基于ADF的应用程序。我可以想出两种方法来实现页面重定向:
1.您可以在adfc-config.xml(甚至faces config.xml)文件中定义导航规则,然后,只需将此定义规则的名称作为按钮的操作属性值。
2.如果希望采用编程方式,则可以调用返回此类字符串的代码,
“mainPage.jsf?faces redirect=true”
,因为adf添加了自己的上下文。例如:

公共字符串登录(){
........
返回“mainPage.jsf”+“?faces redirect=true”;
}

注意:您可能需要添加“/faces/mainPage.jsf”或“/faces/../mainPage.jsf”,这取决于参与导航的两个页面的位置。
根据dispatcher部分,它与JSP一起使用。现在不需要也不建议再使用它了。

出于好奇:您是从某个教程站点获得此代码的吗?我对adf一无所知,但根据经验法则:应避免直接干扰请求分派器(尤其是在托管bean中)。StackOverflow中的重定向部分正如我所说的,不知道adf,但是由于jdeveloper12c似乎支持JEE6,您只需从托管bean返回“Main”或“faces/Main”(而不是转发)就可以获得成功。谢谢,我将其更改为public String loginaction(){BindingContainer bindings=getBindings();OperationBinding OperationBinding=bindings.getOperationBinding(“身份验证”);对象结果=OperationBinding.execute();if(!OperationBinding.getErrors().isEmpty()){return”/faces/Main.jsf?faces redirect=true“}return”/faces/untitled1.jsf?faces redirect=true”;}但它总是重定向到untitled1.jsf我不知道为什么,你能帮我吗?
javax.servlet.ServletException: ADF_FACES-60101:Code de statut d''erreur HTTP : 404."
at oracle.adfinternal.view.faces.config.rich.XmlHttpServletResponse._logException(XmlHttpServletResponse.java:141)
at oracle.adfinternal.view.faces.config.rich.XmlHttpServletResponse.sendError(XmlHttpServletResponse.java:107)
at oracle.adfinternal.view.faces.config.rich.XmlHttpServletResponse.sendError(XmlHttpServletResponse.java:101)
at weblogic.servlet.FileServlet.findSource(FileServlet.java:267)
at weblogic.servlet.FileServlet.doGetHeadPost(FileServlet.java:178)
at weblogic.servlet.FileServlet.service(FileServlet.java:160)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:573)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:272)
at view.Login2.loginaction(Login2.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:1083)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:402)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:478)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:478)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:303)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:208)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:225)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3367)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)