3

リクエスト パラメータと requestScoped Bean を使用してマスター/詳細画面を作成したいのですが、ビュー パラメータが満たされません。

リダイレクトを呼び出すリンク:

<h:form>
        <p:dataTable var="visit" value="#{visitBean.findAllVisits()}">
            <p:column headerText="mdh">
                <p:commandLink action="#{visitDetailBean.seeVisitDetails(visit)}">
                    <h:graphicImage library="images" name="details.png"/>
                </p:commandLink>
            </p:column>
            ....

その背後にある方法:

public String seeVisitDetails(Visit visit) throws IOException {
   return "/pages/mdh-details.xhtml?visitId=" + visit.getId()+ ";faces-redirect=true";
}

詳細 xhtml ページ:

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

<f:metadata>
  <f:viewParam name="visitId" value="#{visitDetailBean.currentVisitId}" />
</f:metadata>

<ui:composition template="/templates/masterLayout.xhtml">
  <ui:define name="content">
    <h:outputText value="#{visitDetailBean.currentVisit.name}"/>
    test
  </ui:define>
</ui:composition>

最後に詳細 Bean:

private long currentVisitId;

public void setCurrentVisitId(long currentVisitId) {
    this.currentVisitId = currentVisitId;
}

public long getCurrentVisitId() {
    return currentVisitId;
}

public Visit getCurrentVisit() {
    return visitService.findVisit(currentVisitId);
}

currentVisitId は常に 0 です。実際には見つかりません。

4

1 に答える 1

3

テンプレートを使用する場合、 と の外側<ui:composition><ui:define>あるものはすべて無視されます。これには<f:metadata>.

の内側に移動し<ui:define>ます<ui:composition>

例えば

<ui:composition template="/templates/masterLayout.xhtml">
  <ui:define name="metadata">
    <f:metadata>
      <f:viewParam ... />
    </f:metadata>
  </ui:define>

  <ui:define name="content">
    ...
  </ui:define>
</ui:composition>

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


具体的な問題とは関係ありませんが、フォルダに配置masterLayout.xhtml/WEB-INFて直接アクセスできないようにすることをお勧めします。

<ui:composition template="/WEB-INF/templates/masterLayout.xhtml">

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

于 2015-05-07T16:17:15.397 に答える