1

私たちは JSF 1.x から JSF 2 に移行する過程にあり、多くの新機能を使用することを本当に楽しみにしていました。h:commandButton が dataTable 内にある明示的なナビゲーションで発生している問題の理由や解決策を見つけることができないようです。

以下に示すように、「Working」リンクは「testPage.xhtml」に正しくリダイレ​​クトされますが、「NOT Working」リンクはリダイレクトされません。現在表示しているページに戻るだけです。これらのページは同じディレクトリにあります。

これが機能しない場合は問題ありませんが、誰かがこの問題に遭遇したかどうか、および解決策があるかどうかに興味がありました.

プロジェクト情報:

  1. JSF 2.x
  2. フォームを囲む Facelet テンプレート
  3. リッチフェイス

たとえば、次のコードは、私のページの 1 つのサニタイズされたサブセットです。

    <h:form id="formListHome">
        <h:commandLink id="clWorkingExplicitLink" 
                    action="testPage.xhtml?faces-redirect=true">Working</h:commandLink>     

        <h:panelGroup id="pGrpExistingListUser" rendered="true">

            <h:panelGrid id="pGridListTable" columns="1">

                <rich:extendedDataTable id="edtLists"
                    value="#{listHomeBacking.modelUserLists}"
                    var="userList"
                    selectionMode="none"
                    columnClasses="pull-center, pull-left, pull-center">

                    <!-- List Title -->
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="List Title" />
                        </f:facet>
                        <h:commandLink value="#{userList.titleName}" action="#{listHomeAction.previewList}" />
                    </h:column>

                    <!-- List Title -->
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="List Edit" />
                        </f:facet>
                        <h:commandLink id="clNOTWorkingExplicitLink" 
                                    action="testPage.xhtml?faces-redirect=true">NOT Working</h:commandLink>     

                    </h:column>

                </rich:extendedDataTable>

            </h:panelGrid>
        </h:panelGroup>
    </h:form>

この問題を解決し、それが機能しない理由をよりよく理解するのに役立つアイデアや方向性は、大歓迎です。

4

2 に答える 2

0

やっとこれを乗り越えることができました。この問題は、ページ template.xhtml の背後にあるコード内に存在していました。このテンプレート バッキング コードでは、次を使用してサーブレットによってセッションに設定された UserSesion オブジェクト (@SessionScoped) をプルしようとしていました。

HttpSession セッション = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); this.userSess = (UserSessionTO) session.getAttribute("userSession");

次を使用していくつかの項目を変更した後、手動でセッションにプッシュバックします。

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("userSession", userSess);

問題は、これがすべてのリクエストで発生していたことであり、リクエストごとにデータテーブルが異なるという問題が発生したと思います。

私の回答でこれを行うべきかどうかはわかりませんが、このサイトからの次の質問/回答が、戻って問題が何であったかを確認するのに役立つと信じています。質問を投稿した後、私はそれが役に立ちました.正しい方向に正確に導くことはできませんでしたが、確かに役に立ちました.

データテーブル内の JSF 2.0 commandLink

于 2012-12-21T18:41:18.430 に答える
0

コードは正しいように見えますが、コンテキストが結果に影響を与える可能性があります。コードが示すように、web.xml の jsf ページの URL マッピングが *.xhtml であることを確認しましたか。*.faces の場合は機能しません。

だからあなたはそれを持っている必要があります:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

しないこと :

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>
于 2012-12-15T06:51:43.337 に答える