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 回答