JSFで何らかの条件に応じてビュー表示(コンポーネントの表示有無など)を切り替える場合、rendered属性を利用するのが割と素直なのかなと思います。
ただPrimeFacesExtensionsを利用することで、以下のような書き方もできます(^^)
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
<title>Switch Sample</title>
</h:head>
<h:body>
<h:form id="frm">
<p:inputText id="switchInput" value="#{switchBean.switchKey}" />
<p:commandButton id="switchBtn" value="スイッチ" update=":frm:switch" />
<pe:switch id="switch" value="#{switchBean.switchKey}">
<pe:defaultCase>
<h:outputLabel value="デフォルト" />
</pe:defaultCase>
<pe:case value="text">
<p:inputText value="テキスト" />
</pe:case>
<pe:case value="button">
<p:commandButton value="ボタン" />
</pe:case>
</pe:switch>
</h:form>
</h:body>
</html>
Backing Bean
package jp.co.kke.primefacessandbox;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named(value = "switchBean")
@RequestScoped
public class SwitchBean implements Serializable{
private String switchKey;
public String getSwitchKey() {
return switchKey;
}
public void setSwitchKey(String switchKey) {
this.switchKey = switchKey;
}
public SwitchBean() {
}
}
動作
初期表示。入力文字がないので、Switch文のdefaultに入り、ラベル表示です。

textと入力してボタン押下するとテキスト表示に変わります。

buttonと入力してボタン押下するとボタン表示に変わります。

ビューの中に条件分岐入るのはどうなんでしょ、と思わなくもないですが、項目が多すぎる場合とか、グループで分かれるような場合とか、このように書いたほうがすっきりするケースもなくはないのかな、と思ったり(^^;
自分自身では実際の利用がまだないのですが、PrimeFacesExtensionsを調べていたらこういう書き方ができるものがあると知ったので、簡単な紹介でした。