не работает при использовании


Я хотел бы создать экран master-detail с параметрами request и requestscoped beans, но парам view не заполняется.

Ссылка, которая вызывает перенаправление:

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

И последние подробности Боба:

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.. Я действительно не могу его найти.

1 2

1 ответ:

При использовании шаблонов все, что находится за пределами <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">

См. также: