Primefaces / JSF2:更新更改ui:动态插入

时间:2016-01-26 15:22:45

标签: jsf-2 primefaces

我想更新一个ui:动态包含。 我尝试使用以下代码实现它:

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

<h:head>
   <title>Title</title>
</h:head>

<h:body>

<p:layout fullPage="true" resizeTitle="resize"
    style="background-color:#FFFFFF;">

    <p:layoutUnit position="north" id="north" size="130" resizable="false"    closable="false">
        <ui:include src="header.xhtml" />
    </p:layoutUnit>

    <p:layoutUnit position="west" id="west" size="231" resizable="false" closable="false" style="overflow:hidden;" >
        <h:form>
            <ui:include src="menu.xhtml" />
        </h:form>
    </p:layoutUnit>

    <p:layoutUnit styleClass="layoutUnitCenter" position="center">
        <h:form id="mainForm">
            <ui:insert name="content" />
        </h:form>
    </p:layoutUnit>
</p:layout>
</h:body>

</html>

客户:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
template="WEB-INF/templates/layout.xhtml" >


   <ui:define name="content">
       <ui:include src="pages/#{appView.content}.xhtml" />
   </ui:define>
</ui:composition>

使用AppView.java:

@ManagedBean
@SessionScoped
public class AppView {

  private String content;

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  @PostConstruct
  public void init() {
      this.content = "tiers/search"; 
  }

}

第一页是搜索页面。当我进行搜索并找到某些内容时,我会尝试更新内容&#34;包含具有结果的页面。

search.xhtml

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

<h:form id="form" title="Recherche">

    <p:growl id="msgs" showDetail="true" />

    <p:panelGrid columns="2" cellpadding="5">
        <p:outputLabel for="numPersonne" value="Numéro Personne" />
        <p:inputText id="numPersonne" size="20" value="#{ficheRechercheView.numPersonne}" />

        <p:outputLabel for="numSiren" value="Numéro SIREN" />
        <p:inputText id="numSiren" size="20" value="#{ficheRechercheView.numSiren}" />

        <p:outputLabel for="numInternatl" value="Numéro International" />
        <p:inputText id="numInternatl" size="50" value="#{ficheRechercheView.numInternatl}" />

        <p:outputLabel for="raisonSociale" value="Raison sociale" />
        <p:inputText id="raisonSociale" size="50" value="#{ficheRechercheView.raisonSociale}" />
    </p:panelGrid>

    <p:commandButton value="Valider" action="#{searchView.search}" icon="ui-icon-check" />
</h:form>
</ui:composition>

SearchView.java将AppView.java作为托管属性。

@ManagedProperty(value="#{appView}")
private AppView appView; 

public void search() {
    ....

    appView.setContent("tiers/detail");
    RequestContext context = RequestContext.getCurrentInstance();
    context.update("content");
}

如果我更新页面,我只会获得更新的显示。

作为一个旁听的问题,我应该以这种方式管理导航,还是每次只使用相同的模板加载不同的页面?

0 个答案:

没有答案