【问题标题】:<f:viewParam> not working when using <ui:composition template><f:viewParam> 在使用 <ui:composition template> 时不起作用
【发布时间】:2015-05-07 15:57:40
【问题描述】:

我想创建一个包含请求参数和 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.. 我真的找不到它。

【问题讨论】:

    标签: jsf templates facelets composition viewparams


    【解决方案1】:

    使用模板时,&lt;ui:composition&gt;&lt;ui:define&gt; 之外的任何内容都会忽略。这包括&lt;f:metadata&gt;

    将其移至&lt;ui:composition&gt;&lt;ui:define&gt; 内。

    例如

    <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">
    

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2014-08-24
      相关资源
      最近更新 更多