条件jsf包括

时间:2013-03-04 09:09:33

标签: dynamic jsf-2 user-interface include

如何在运行时有条件地包含jsf facelets文件? 所需的样本功能是

if ( add button click) {

ui:include src="Add.xhtml"
}

if ( update button click) {

ui:include src="Update.xhtml"
}

上面的语法仅仅是指示性的......

Mojarra 2.1.1 / Apache Tomcat 7.0.22 / PrimeFaces 3.4

2 个答案:

答案 0 :(得分:7)

ui:include没有rendered属性,因此您必须将其封装在其他组件中。您还将在点击按钮的基础上在服务器基础上设置一些属性。

<h:form>
  <p:commandButton value="Add" update=":includeContainer">
    <f:setPropertyActionListener value="add" target="#{myBean.action}"/>
  </p:commandButton>
  <p:commandButton value="Update" update=":includeContainer">
    <f:setPropertyActionListener value="update" target="#{myBean.action}"/>
  </p:commandButton>
</h:form>

<h:panelGroup id="includeContainer">
  <h:panelGroup rendered="#{myBean.action == 'add'}">
    <ui:include src="add.xhtml"/>
  </h:panelGroup>
  <h:panelGroup rendered="#{myBean.action == 'update'}">
    <ui:include src="update.xhtml"/>
  </h:panelGroup>
</h:panelGroup>

在支持bean中你将拥有getter和setter:

public void setAction(String action) {
  this.action = action;
}

public String getAction() {
  return action;
}

答案 1 :(得分:1)

我重新发布partlov的答案因为有一些错误而且我将这个错误归结为这个位置,并祝贺partlov得到很好的答案

我补充你的答案 首先这是一个xhtml页面,其中有主要面孔,如果你想使用p:添加这个frameworc或其他。

如果你不在这里下载这个framewor doenload Download prime Framework for JSF

并以这种方式推动

xmlns:p="http://primefaces.org/ui"

<强> select.XHTML

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
  <h:form>
    <p:commandButton value="Add" update="panel">
      <f:setPropertyActionListener value="add" target="#{myBean.action}"/>
    </p:commandButton>
    <p:commandButton value="Update" update="panel">
      <f:setPropertyActionListener value="update" target="#{myBean.action}"/>
    </p:commandButton>


    <h:panelGroup id="panel">
      <h:panelGroup rendered="#{myBean.action == 'add'}">
        <ui:include src="headerLogin.xhtml"/>
      </h:panelGroup>
      <h:panelGroup rendered="#{myBean.action == 'update'}">
        <ui:include src="Pajax.xhtml"/>
      </h:panelGroup>
    </h:panelGroup>
  </h:form>
</h:body>

nex步骤是创建一个clas myBean,并使用此字符串作为您想要渲染的选择的UI 的 myBean.java

在bean中使用此导入

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

并在clas中使用此鳕鱼

public class myBean {
String action;
public void setAction(String action) {

    this.action = action;
}

public String getAction() {
  return action;
}

}

但请记住把这一行放到一个类

@ManagedBean
@SessionScoped