Java JSF2.0复合为每个传递的值添加一个富选项卡
我使用JSF 2.0 composite来创建一种模板,并最小化我的xhtml工作。例如,我有一个复合xhtml:Java JSF2.0复合为每个传递的值添加一个富选项卡,java,jsf-2,composite-component,Java,Jsf 2,Composite Component,我使用JSF 2.0 composite来创建一种模板,并最小化我的xhtml工作。例如,我有一个复合xhtml: <?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="ht
<?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://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
>
<cc:interface>
<cc:attribute name="tableHeadder" />
<cc:attribute name="fechaValueInicial" />
<cc:attribute name="fechaValueFinal" />
<cc:attribute name="nombreSelectOne" />
<cc:attribute name="valueSelectOne" />
<cc:attribute name="valueSelectList" />
<cc:attribute name="nombreCommandButton" />
<cc:attribute name="firstTabName" />
<cc:attribute name="firstTabValue" />
<cc:attribute name="secondTabName" />
<cc:attribute name="secondTabValue" />
<cc:attribute name="thirdTabName" />
<cc:attribute name="thirdTabValue" />
<cc:attribute name="funcionCommandButton"
method-signature="java.lang.String action()" />
</cc:interface>
<cc:implementation>
<a4j:status onstart="#{rich:component('statPane')}.show()"
onstop="#{rich:component('statPane')}.hide()" />
<h:form>
<rich:panel header="#{cc.attrs.tableHeadder}">
<rich:messages/>
<div>
<div>
<h:outputText value="Del:"/>
<rich:calendar datePattern="dd/MMMM/yyyy" popup="true" mode="ajax"
required="true"
requiredMessage="Selecciona una fecha inicial"
locale="es" value="#{cc.attrs.fechaValueInicial}" />
<h:outputText value="Al:"/>
<rich:calendar datePattern="dd/MMMM/yyyy" popup="true" mode="ajax"
required="true"
requiredMessage="Selecciona una fecha final"
locale="es" value="#{cc.attrs.fechaValueFinal}" />
<br/><br/>
<h:outputLabel value="#{cc.attrs.nombreSelectOne}" />
<h:selectOneMenu
value="#{cc.attrs.valueSelectOne}">
<f:selectItems value="#{cc.attrs.valueSelectList}" />
</h:selectOneMenu>
<br/><br/>
<h:commandButton value="#{cc.attrs.nombreCommandButton}" actionListener="#{cc.attrs.funcionCommandButton}" />
</div>
</div>
<br/><br/><br/><br/>
<rich:tabPanel switchType="server">
<rich:tab header="#{cc.attrs.firstTabName}">
<ui:include src="#{cc.attrs.firstTabValue}" />
</rich:tab>
<rich:tab header="#{cc.attrs.secondTabName}">
<ui:include src="#{cc.attrs.secondTabValue}" />
</rich:tab>
<rich:tab header="#{cc.attrs.thirdTabName}">
<ui:include src="#{cc.attrs.thirdTabValue}" />
</rich:tab>
</rich:tabPanel>
<ui:include src="../../waitPopup.xhtml" />
</rich:panel>
</h:form>
</cc:implementation>
并通过以下方式实施:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:CT="http://java.sun.com/jsf/composite/CompositeTemplates"
>
<h:head>
<title>Reporte de Recepcion de Leche</title>
</h:head>
<body>
<CT:reportes
tableHeadder="Reporte Recepcion de Leche"
fechaValueInicial="#{lecheReporteProveedoresVB.fechaInicial}"
fechaValueFinal="#{lecheReporteProveedoresVB.fechaFinal}"
nombreSelectOne="Proveedores: "
valueSelectOne="#{lecheReporteProveedoresVB.proveedor}"
valueSelectList="#{CatalogoProveedoresLecheSI.selectList}"
nombreCommandButton="Consultar"
funcionCommandButton="#{lecheReporteProveedoresVB.consultar()}"
firstTabName="Recepcion por Dia"
firstTabValue="../../leche/lecheReporteProveedoresDia.xhtml"
secondTabName="Recepcion por Mes"
secondTabValue="../../leche/lecheReporteProveedoresMes.xhtml"
thirdTabName="Recepcion por Proveedores"
thirdTabValue="../../leche/lecheReporteProveedoresRecibido.xhtml"/>
</body>
我想,与其声明firstTab secondTab thirdTab,不如只给出3个firstTab值,并且composite会创建3个richTab组件,这有可能吗?您可以做的一件事是动态使用和创建选项卡。。第一种方法,您可以对此进行改进。。会做这样的事情 在您的组件中:
<?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://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
>
<cc:interface>
<cc:attribute name="tableHeadder" />
<cc:attribute name="fechaValueInicial" />
<cc:attribute name="fechaValueFinal" />
<cc:attribute name="nombreSelectOne" />
<cc:attribute name="valueSelectOne" />
<cc:attribute name="valueSelectList" />
<cc:attribute name="nombreCommandButton" />
<cc:attribute name="tabList" />
<cc:attribute name="funcionCommandButton"
method-signature="java.lang.String action()" />
</cc:interface>
<cc:implementation>
<a4j:status onstart="#{rich:component('statPane')}.show()"
onstop="#{rich:component('statPane')}.hide()" />
<h:form>
<rich:panel header="#{cc.attrs.tableHeadder}">
<rich:messages/>
<div>
<div>
<h:outputText value="Del:"/>
<rich:calendar datePattern="dd/MMMM/yyyy" popup="true" mode="ajax"
required="true"
requiredMessage="Selecciona una fecha inicial"
locale="es" value="#{cc.attrs.fechaValueInicial}" />
<h:outputText value="Al:"/>
<rich:calendar datePattern="dd/MMMM/yyyy" popup="true" mode="ajax"
required="true"
requiredMessage="Selecciona una fecha final"
locale="es" value="#{cc.attrs.fechaValueFinal}" />
<br/><br/>
<h:outputLabel value="#{cc.attrs.nombreSelectOne}" />
<h:selectOneMenu
value="#{cc.attrs.valueSelectOne}">
<f:selectItems value="#{cc.attrs.valueSelectList}" />
</h:selectOneMenu>
<br/><br/>
<h:commandButton value="#{cc.attrs.nombreCommandButton}" actionListener="#{cc.attrs.funcionCommandButton}" />
</div>
</div>
<br/><br/><br/><br/>
<rich:tabPanel switchType="server">
<ui:repeat var="tab" value="#{cc.attrs.tabList}" >
<rich:tab header="#{tab.header}">
<ui:include src="#{tab.src}" />
</rich:tab>
</ui:repeat>
</rich:tabPanel>
<ui:include src="../../waitPopup.xhtml" />
</rich:panel>
</h:form>
</cc:implementation>
}
在你的豆子里。。只需添加一个列表并填充它
...
private List<TabData> tabs = new ArrayList<TabData>();
@PostConstrunct
public void init() {
tabs.add(new TabData("Recepcion por Dia","../../leche/lecheReporteProveedoresDia.xhtml"));
...
}
/* Getter & Setter */
最后..要使用组件:
<CT:reportes
tableHeadder="Reporte Recepcion de Leche"
fechaValueInicial="#{lecheReporteProveedoresVB.fechaInicial}"
fechaValueFinal="#{lecheReporteProveedoresVB.fechaFinal}"
nombreSelectOne="Proveedores: "
valueSelectOne="#{lecheReporteProveedoresVB.proveedor}"
valueSelectList="#{CatalogoProveedoresLecheSI.selectList}"
nombreCommandButton="Consultar"
funcionCommandButton="#{lecheReporteProveedoresVB.consultar()}"
tabList="#{bean.tabs}" />
我从来没有在Richfaces上尝试过这种方法,我用它来创建jQuery,效果很好……而且,您可以在这方面进行改进
“问候”外观完美将于明天实施并给您反馈我已经在考虑类似的事情了,毕竟我看到了一篇使用ui的类似帖子:重复
<CT:reportes
tableHeadder="Reporte Recepcion de Leche"
fechaValueInicial="#{lecheReporteProveedoresVB.fechaInicial}"
fechaValueFinal="#{lecheReporteProveedoresVB.fechaFinal}"
nombreSelectOne="Proveedores: "
valueSelectOne="#{lecheReporteProveedoresVB.proveedor}"
valueSelectList="#{CatalogoProveedoresLecheSI.selectList}"
nombreCommandButton="Consultar"
funcionCommandButton="#{lecheReporteProveedoresVB.consultar()}"
tabList="#{bean.tabs}" />