2014-01-30 39 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