すべてのメニューに対して単一のメソッドでメニューを介してテンプレートを動的にロードする方法。メソッドを呼び出したメニュー項目を特定する方法。これは私のxhtmlです:
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" size="80" resizable="true" closable="true" collapsible="true">
<h:form id="form3">
<ui:include src="./templates/template.xhtml" />
</h:form>
</p:layoutUnit>
<p:layoutUnit position="south" size="100" closable="true" collapsible="true">
Footer
</p:layoutUnit>
<p:layoutUnit position="west" header="Opciones" size="175">
<h:form id="form1">
<p:panelMenu style="width:200px">
<p:submenu label="Clientes" >
<p:menuitem value="Adicionar" update=":form2" actionListener="#{templateMB.templateAddCliente}" />
<p:menuitem value="Modificar" update=":form2" actionListener="#{templateMB.templateConfigCliente}" />
<p:menuitem value="Listado" update=":form2" actionListener="#{templateMB.templateListadoCliente}" />
</p:submenu>
<p:submenu label="Contratos">
<p:menuitem value="Adicionar" update=":form2" actionListener="#{templateMB.templateAddContrato}" />
</p:submenu>
<p:separator/>
<p:submenu label="Suplementos" >
<p:menuitem value="Adicionar" icon="ui-icon-signal"/>
</p:submenu>
</p:panelMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center" id="centerlayout">
<h:form id="form2">
<ui:include src="#{templateMB.centerTemplate}" />
</h:form>
<p:dialog id="dialog" header="Subir Documento del Contrato" resizable="false" widgetVar="fileDialog" showEffect="explode" hideEffect="explode" width="500" height="200">
<h:form enctype="multipart/form-data">
<p:panel id="panelDialog">
<p:fileUpload value="#{contratosMB.fileContrato}" mode="simple" style="width: 400px"/>
<br/>
<br/>
<p:commandButton value="Guardar" ajax="false"
actionListener="#{contratosMB.upload}"/>
</p:panel>
</h:form>
</p:dialog>
</p:layoutUnit>
</p:layout>
</h:body>
これは私のバッキングBeanです:
public String templateAddCliente() {
try {
this.centerTemplate = "./templates/addCliente.xhtml";
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage("Ha ocurrido un error: " + e.getMessage());
return null;
}
}
public String templateConfigCliente() {
try {
this.centerTemplate = "./templates/configCliente.xhtml";
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage("Ha ocurrido un error: " + e.getMessage());
return null;
}
}
public String templateHome() {
try {
this.centerTemplate = "./templates/hometemplate.xhtml";
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage("Ha ocurrido un error: " + e.getMessage());
return null;
}
}
public String templateListadoCliente() {
try {
this.centerTemplate = "./templates/listadoCliente.xhtml";
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage("Ha ocurrido un error: " + e.getMessage());
return null;
}
}
public String templateAddContrato() {
try {
this.centerTemplate = "./templates/addContratos.xhtml";
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage("Ha ocurrido un error: " + e.getMessage());
return null;
}
}
これまでのところすべてが正常に機能していますが、メニュー項目ごとにメソッドを作成する必要があり、好きではありません。backinbeanで単一のメソッドを使用してページをロードしたいのですが、方法が見つかりません。