2017-05-19 16 views
1

私はejb経由でjsfリダイレクトに悩まされていますが、問題を見つけずに問題を見つけるために1日を費やしています。actionListener経由のリダイレクトは動作しません

EJBでアクションを実行し、その結果に応じて、ユーザーを別のページにリダイレクトします。私は関数がエラーなく動作すると確信して、私は結果をデバッグモードで追跡します。

私はすでに他のプロジェクトで同じ方法でリダイレクトを行っていますが、ここでは機能しません。確かに、私は同じ問題を抱えている非常に基本的な機能を作りました。ただ、機能をテストするために

私はテスト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うん、それは私が学生なので私がやっていることです。初心者は歓迎されない? Return "login.xhtml"はリダイレクトではありませんか?私はそれがこのhttps://maxkatz.org/2009/09/18/learning-jsf2-navigation/による暗黙的なリダイレクトだと思います。私は比較を行った – Ersch

+0

@Bonifacio私は同じ問題を試みたが、同じ問題を試みた – Ersch

答えて

1

コンポーネントp:commandButtonは、リダイレクトパラメータを明示的に付加せずに単純な文字列を使用してアクションリダイレクトをサポートしていません。

アクションを使用してリダイレクトする場合は、文字列にURLパラメータとしてfaces-redirect=trueを含める必要があります。

は少しトリックを行う必要があり、あなたのコードを変更する:

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

私はOPがこれを行う最も正しい方法を使用していないことに同意しますが、パターンを追いかける必要があります。私たちはあまりにも複雑で、初心者にとってははるかに大きな学習曲線を作り上げることになります。私はこれに目を向けるべきではありませんが、簡単な修正は複雑なチュートリアルよりもはるかに役立つことがあります。 – Bonifacio

+0

私はそれに同意しません。そのため、チュートリアルでは「トピック外です」と述べましたが、効果的には完全には正しくありません。なぜなら、最初の行の状態は 'p:commandButton'ではなく' h:commandButton'を実行します。そして、 'p \ h:commandLink'のために。また、「重複」を参照することで、より多くの情報が得られ、解決策を提供する代わりにポスターを覚えることができます(修正方法を学習する代わりに魚を提供する)。 (私はこの質問にマークした複写を参照してください) – Kukeltje

+1

あなたの助けてくれてありがとう、それは今アクションを変更し、?faces-redirect = trueを加えることによって動作します。私は用語がより良いことができることに同意しますが、英語に置くことは私の母親の言語ではありません – Ersch

関連する問題