2011-05-15 29 views
3

我有主网页看起来像这样:试图改变<ui:include> SRC标签动态

<?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,并动态地改变包括哪个页面。这是豆的样子:

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

问题是,我有两次按下按钮的页面被包括。当我按下第一次包含页面的按钮时,如何做到这一点?

+0

什么是JSF impl/version?什么PF版本?无法在Mojarra 2.1.1和PF 2.2.1上重现您的问题。请注意,您的包含页面模板组合非常...奇怪(但它应该工作,我甚至自己测试过,以排除它成为问题的原因)。 – BalusC 2011-06-13 20:22:53

回答

0

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

+0

嗨,我面临类似的问题,我也不明白模板文件将如何帮助在这种情况下。有没有其他的方式可以让页面只出现一次? – Amruta 2012-08-27 10:36:58

+0

对不起,我不清楚你在问什么。可能最好提出一个新问题,而不是在评论中这样做。你可以随时链接到这个问题以供参考。 – 2012-08-29 06:35:50