2014-01-30 77 views
1

我嘗試使用Primefaces 4.0和JSF 2.2.5構建應用程序。我需要根據選擇的菜單項動態加載內容。 這是我的主網頁:JSF命令按鈕不在所包含的JSF頁面中工作

<?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://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
<title>Hello, world!</title> 
</h:head> 
<h:body> 
<p:layout fullPage="true"> 
    <p:layoutUnit position="west" size="15%"> 
     <h:form> 
      <p:commandButton value="List1" action="#{backingBean.setCurrentPage('included.xhtml')}" 
          update=":mypanel_id" process="@this"/><br/> 
      <p:commandButton value="List2"/> 
     </h:form> 
    </p:layoutUnit> 
    <p:layoutUnit position="center"> 
     <p:panel id="mypanel_id"> 
      <ui:include src="#{backingBean.page}"/> 
     </p:panel> 
     <p:messages autoUpdate="true" showDetail="true" showSummary="true"/> 
    </p:layoutUnit> 
</p:layout> 
</h:body> 
</html> 

,這是包括頁:

<?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://xmlns.jcp.org/jsf/html" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head> 
<title>Hello,world</title> 
</h:head> 
<h:body> 
    <h:outputText value="Included page"/> 
    <h:form> 
     <ui:repeat value="#{backingBean.items}" var="item"> 
      <p:fieldset legend="item" toggleable="true"> 
       <h:outputText value="#{item}"/> 
       <ui:param name="it" value="#{item}"/> 
       <p:commandButton value="Click" style="margin-left: 50px;" 
           actionListener="#{backingBean.actionListener}"/> 
      </p:fieldset> 
     </ui:repeat> 
     <p:commandButton value="Test" action="#{backingBean.actionListener}"/> 
    </h:form> 
</h:body> 
</html> 

命令按鈕不起作用。不與行動或與actionListener。我做錯了什麼?如何使用有條件渲染的元素(如命令按鈕和字段集)構建頁面?

P.S.忘記說,我的bean有請求範圍。

更新時間:

public class BackingBean { 
private List<String> items; 
private String currentItem; 
private String page; 

public BackingBean() { 
    items = new ArrayList<String>(); 
} 

public List<String> getItems() { 
    if (items.size() == 0) { 
     this.fillAndUpdate(); 
    } 
    return items; 
} 

public void setItems(List<String> items) { 
    this.items = items; 
} 

public void fillAndUpdate() { 
    for (int i = 0; i < 5; i++) { 
     items.add("Item " + String.valueOf(i)); 
    } 
} 

public String getPage() { 
    return page; 
} 

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

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

public void actionListener() { 
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Test")); 
} 

}

修訂

確定。我發現錯誤(如果有人感興趣)。因爲我的bean有請求範圍,所以當我點擊右側面板中的按鈕時,我的視圖被更新了,但是項目列表也被更新了,並且變成了空的(請求範圍)。現在我在會話bean中保留選定的菜單,並在呈現視圖時返回該數字。

回答

0

嘗試添加ajax="false"在您的命令按鈕

+0

@Egor如果它不工作,更新你的問題,並把你的backingBean的代碼。 – Reem

+0

我添加了輔助bean的代碼。 –

+0

1)在seconde按鈕列表2中,您沒有指定actionListener 2)primefaces showcase可以幫助您http://www.primefaces.org/showcase/ui/growl.jsf。 – Reem