尝试动态更改<ui:include> src标记</ui:include>

时间:2011-05-15 00:14:57

标签: jsf facelets

我的主页面看起来像这样:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:p="http://primefaces.prime.com.tr/ui">
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h:form>
        <p:panel id="panel">
            <ui:include src="#{bean.page}">
            </ui:include>
        </p:panel>
        <p:commandButton actionListener="#{bean.changePage}" value="Push" ajax="true" update="panel"/>
    </h:form>
</h:body>
</html>

我想要的是拥有这样的bean并动态更改包含哪个页面。这就是bean的样子:

 @ManagedBean
 @SessionScoped
 public class Bean {
    private String page = "";

    public Bean() {
    }

    public String getPage() {
       return page;
    }

    public void setPage(String page) {
       this.page = page;
    }

    public void changePage(ActionEvent e) {
       page = "Page.xhtml";
    }   
}

当我点击按钮时,我希望包含此页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets">
   <h:head>
       <title>Facelet Title</title>
</h:head>
<h:body>
    <h:form>
        <ui:component>
            Hello from facelets
        </ui:component>
    </h:form>
</h:body>

问题是我必须按两次按钮才能包含页面。当我第一次包含页面按下按钮时,怎么做呢?

1 个答案:

答案 0 :(得分:0)

通常使用<ui:insert><ui:define>标记来实现此类模板。查看Java EE教程的this page