2017-05-19 35 views
1

我坚持通过ejb jsf重定向,我花了一天找到问题没有发现问题。重定向通过actionListener不工作

我想在EJB中运行一个动作,并根据结果将用户重定向到另一个页面。我确定该函数没有错误,我在调试模式下遵循结果。

我已经在其他项目中以相同的方式做了重定向,但它在这里不起作用,在ordre中可以肯定,我创建了一个非常基本的函数,在这里我遇到了同样的问题。

只是为了测试我做了一个测试EJB功能:

@Named 
@SessionScoped 
public class testController implements Serializable{ 
    public String redirection(){ 
     return "login.xhtml"; 
    } 
} 

和在那里我尝试使用fonction:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
     <f:facet name="first"> 
      <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> 
      <meta name="apple-mobile-web-app-capable" content="yes" /> 
     </f:facet> 
     <title>PrimeFaces Omega</title> 
    </h:head> 

    <h:body styleClass="login-body"> 
     <p:commandButton value="test" actionListener="#{testController.redirection()}"/> 
     </h:body> 
</html> 

这是在web.xml配置:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <welcome-file-list> 
     <welcome-file>login.xhtml</welcome-file> 
    </welcome-file-list> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <!-- JSF mapping --> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <!-- Map these files with JSF --> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>omega</param-value> 
    </context-param> 
    <context-param> 
     <param-name>primefaces.FONT_AWESOME</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <mime-mapping> 
     <extension>ttf</extension> 
     <mime-type>application/font-sfnt</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff</extension> 
     <mime-type>application/font-woff</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff2</extension> 
     <mime-type>application/font-woff2</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>eot</extension> 
     <mime-type>application/vnd.ms-fontobject</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>eot?#iefix</extension> 
     <mime-type>application/vnd.ms-fontobject</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exosemibold</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exobolditalic</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exomedium</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exoregular</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#fontawesomeregular</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
</web-app> 

我查看日志文件,我的功能没有错误,但我应该重定向到索引页应用程序离子停留在页面上。

有人可以帮忙吗?

+2

你可以尝试从调用重定向方法“行动”而不是“的ActionListener”? – Bonifacio

+0

@Kukeltje yep这就是我在做什么,因为我是一名学生。新手不欢迎?返回“login.xhtml”是不是重定向?我不知道这是根据https://maxkatz.org/2009/09/18/learning-jsf2-navigation/隐式重定向。我做了一个比较 – Ersch

+0

@Bonifacio我试过但同样的问题 – Ersch

回答

1

组件p:commandButton不支持仅使用普通字符串进行动作重定向,也不明确附加重定向参数。

如果您想要使用该操作进行重定向,则必须在您的字符串中包含faces-redirect=true作为url参数。

改变你的代码位应该做的伎俩:

public String redirection(){ 
    return "login.xhtml?faces-redirect=true"; 
} 
+0

我同意OP没有使用最正确的方法来做到这一点,但另一方面,如果我们总是强制执行最正确的必须遵循模式,我们最终会为初学者创造太多的复杂性和更大的学习曲线。我并不是说我们应该对此视若无睹,但有时候一个简单的解决方案可以帮助您解决复杂的教程。 – Bonifacio

+0

我并不反对,这就是为什么我在本教程中提到'off-topic';-),但实际上它并不完全正确,因为你在第一行中声明的不是'p:commandButton',而是' h:commandButton'到。还有一个'p \ h:commandLink'等等。通过引用“重复”,通常会有更多的信息,海报可以学习而不是提供解决方案(提供鱼而不是学习如何修复)。 (请参阅我标记此问题的副本) – Kukeltje

+1

感谢您的帮助,它现在通过更改操作并添加?faces-redirect = true来工作。我同意,术语可以更好,但把英语不是我的母亲郎 – Ersch