1

h:linkwithを使用しincludeViewParams=trueてリスト ページとビュー ページの間を移動し、ビュー ページの URL をブックマーク可能にしますが、機能しません。以下は私のコードの関連部分です:

layout.xhtml (私のテンプレート):

<f:view locale="#{localeBean.lang}">
    <ui:insert name="metadata"/>

Articles.xhtml (私のリストページ):

<h:form>
    <p:datagrid var="item" value="articleController.items">
        <p:column>
            <h:link outcome="View_Articles?faces-redirect=true&amp;includeViewParams=true" styleClass="view-details">
               <h:outputText value="#{item.title}"/>     
               <f:param name="id" value="#{item.articleId}"/>
            </h:link>
        </p:column>
    </p:datagrid>
</h:form>

View_Article.xhtml (私のビューの詳細ページ):

<ui:composition template="./WEB-INF/templates/layout.xhtml"> 
     <ui:define name="metadata">
         <f:metadata>
             <f:viewParam name="id" value="#{articleController.id}" />
             <f:viewParam name="id" value="#{articleLclController.id}"/>
         </f:metadata>
</ui:define>

詳細情報: 私は JSF 2.2、ocpsoft 書き換えフィルター、primefaces ライブラリを使用しており、ArticleController.javaセッション スコープです。

私は次のことを試しました:

1-私は使用しh:commandLinkました; これで、ナビゲーションは機能しましたが、URL に view-params が含まれていませんでした

Articles.xhtml:

<h:commandLink id="viewArticleDetails" action="#{articleController.viewArticleByID()}" styleClass="view-details">
    <h:outputText value="View Details"/>
    <f:setPropertyActionListener target="#{articleController.id}" value="#{item.articleId}"/>
    <f:setPropertyActionListener target="#{articleLclController.id}" value="#{item.articleId}"/>
</h:commandLink>

ArticleController.java: ...

private Long id;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
    current = ejbFacade.find(id);
}

public String viewArticleByID(){                      
    return "View_Article?faces-redirect=true&amp;includeViewParams=true";
}

...

URLはあるとhttp://localhost:8080/testApp/en/View_Article?id=1思っていたのですが、`http://localhost:8080/testApp/en/View_Article

2-挿入http://localhost:8080/testApp/en/View_Article?id=1しましたが、どちらの場合も機能しました。

4

1 に答える 1

1

このincludeViewParamsパラメーターは、指定されたビューに既にあるビューパラメーターに対してのみ機能します(あなたの場合、Articles.xhtmlそれらのいずれも取得していません)。として渡すだけf:paramです。プレーンな GET リクエストを実行したいので、次のようにするのが最善ですh:link

<h:link outcome="View_Articles" styleClass="view-details">
   <h:outputText value="#{item.title}"/>     
   <f:param name="id" value="#{item.id}" />
</h:link>

そうすれば、目的のページでアイテムの ID を取得できますが、アドレス バーで URL を変更するには不十分です。それを達成する?faces-redirect=trueには、結果に追加してリダイレクトを強制します。

以下も参照してください。

于 2014-01-24T19:39:38.273 に答える