Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 创建可自定义的组件_Jsf_Jsf 2_Primefaces_Composite Component_Primefaces Extensions - Fatal编程技术网

Jsf 创建可自定义的组件

Jsf 创建可自定义的组件,jsf,jsf-2,primefaces,composite-component,primefaces-extensions,Jsf,Jsf 2,Primefaces,Composite Component,Primefaces Extensions,我是JSF新手。我们正在使用JSF和primefaces构建一个web应用程序。我们有很多地方需要展示桌子。该表应该有分页,列大小可调,在某些地方我们需要右键单击上下文菜单,等等 我能够通过primefaces提供的dataTable组件实现这一点。但我想将其创建为更可定制的组件。比如可重用的javascript/jquery()插件,我们只需设置几个属性值就足够了 如果创建了一个可以在所有位置重用的组件并设置了参数(例如:ColumnResizeable='true',columnSortab

我是JSF新手。我们正在使用JSF和primefaces构建一个web应用程序。我们有很多地方需要展示桌子。该表应该有分页,列大小可调,在某些地方我们需要右键单击上下文菜单,等等

我能够通过primefaces提供的
dataTable
组件实现这一点。但我想将其创建为更可定制的组件。比如可重用的javascript/jquery()插件,我们只需设置几个属性值就足够了

如果创建了一个可以在所有位置重用的组件并设置了参数(例如:ColumnResizeable='true',columnSortable='true'),从而节省了开发时间,那么我也希望采用类似的方法,而不是为所有功能编写整个代码


我对如何实现这一目标一无所知。如果有人能指导,那就太好了。我并不期待完整的代码,任何使用JSF实现这一点的想法都会得到赞赏。

您应该使用复合组件,您可以传递任意多个参数,并使用
{cc.attrs.param1}
语法对其进行相应的自定义。下面是一个示例XHTML

复合组件

<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:u="http://java.sun.com/jsf/composite/ui" xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:s="http://jboss.org/seam/faces" xmlns:p="http://primefaces.org/ui" xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
        <cc:attribute name="tableId" />
        <cc:attribute name="param1" />
        <cc:attribute name="param2" default="false" />
        <cc:attribute name="param3" required="true" />
    </cc:interface>
    <cc:implementation>
        <p:dataTable id="#{cc.attrs.tableId}" rendered="#{cc.attrs.param2}" value="#{cc.attrs.param1}" var="result" emptyMessage="#{messages['global.noItemsFound']}">
                            <ui:include src="#{cc.attrs.param3}" />
        </p:dataTable>
    </cc:implementation>
</ui:component>
别忘了在视图中添加标题:

xmlns:u="http://java.sun.com/jsf/composite/ui"
columns.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.org/seam/faces" xmlns:u="http://java.sun.com/jsf/composite/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <p:column  headerText="Name">
        <h:outputText value="#{result.name}" />
    </p:column>
    <p:column  headerText="Salary">
        <h:outputText value="#{result.salary}" />
    </p:column>
    <p:column  headerText="Age">
        <h:outputText value="#{result.age}" />
    </p:column>
</ui:composition>


在复合组件中使用
并将另一个包含列数据的列表作为参数传递,这是包含列的单独视图的替代方法

您应该使用复合组件,您可以传递任意数量的参数,并使用
{cc.attrs.param1}
语法对其进行相应的自定义。下面是一个示例XHTML

复合组件

<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:u="http://java.sun.com/jsf/composite/ui" xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:s="http://jboss.org/seam/faces" xmlns:p="http://primefaces.org/ui" xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
        <cc:attribute name="tableId" />
        <cc:attribute name="param1" />
        <cc:attribute name="param2" default="false" />
        <cc:attribute name="param3" required="true" />
    </cc:interface>
    <cc:implementation>
        <p:dataTable id="#{cc.attrs.tableId}" rendered="#{cc.attrs.param2}" value="#{cc.attrs.param1}" var="result" emptyMessage="#{messages['global.noItemsFound']}">
                            <ui:include src="#{cc.attrs.param3}" />
        </p:dataTable>
    </cc:implementation>
</ui:component>
别忘了在视图中添加标题:

xmlns:u="http://java.sun.com/jsf/composite/ui"
columns.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.org/seam/faces" xmlns:u="http://java.sun.com/jsf/composite/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <p:column  headerText="Name">
        <h:outputText value="#{result.name}" />
    </p:column>
    <p:column  headerText="Salary">
        <h:outputText value="#{result.salary}" />
    </p:column>
    <p:column  headerText="Age">
        <h:outputText value="#{result.age}" />
    </p:column>
</ui:composition>


在复合组件中使用
并将另一个包含列数据的列表作为参数传递,这是包含列的单独视图的替代方法

您应该使用复合组件,您可以传递任意数量的参数,并使用
{cc.attrs.param1}
语法对其进行相应的自定义。下面是一个示例XHTML

复合组件

<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:u="http://java.sun.com/jsf/composite/ui" xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:s="http://jboss.org/seam/faces" xmlns:p="http://primefaces.org/ui" xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
        <cc:attribute name="tableId" />
        <cc:attribute name="param1" />
        <cc:attribute name="param2" default="false" />
        <cc:attribute name="param3" required="true" />
    </cc:interface>
    <cc:implementation>
        <p:dataTable id="#{cc.attrs.tableId}" rendered="#{cc.attrs.param2}" value="#{cc.attrs.param1}" var="result" emptyMessage="#{messages['global.noItemsFound']}">
                            <ui:include src="#{cc.attrs.param3}" />
        </p:dataTable>
    </cc:implementation>
</ui:component>
别忘了在视图中添加标题:

xmlns:u="http://java.sun.com/jsf/composite/ui"
columns.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.org/seam/faces" xmlns:u="http://java.sun.com/jsf/composite/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <p:column  headerText="Name">
        <h:outputText value="#{result.name}" />
    </p:column>
    <p:column  headerText="Salary">
        <h:outputText value="#{result.salary}" />
    </p:column>
    <p:column  headerText="Age">
        <h:outputText value="#{result.age}" />
    </p:column>
</ui:composition>


在复合组件中使用
并将另一个包含列数据的列表作为参数传递,这是包含列的单独视图的替代方法

您应该使用复合组件,您可以传递任意数量的参数,并使用
{cc.attrs.param1}
语法对其进行相应的自定义。下面是一个示例XHTML

复合组件

<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:u="http://java.sun.com/jsf/composite/ui" xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:s="http://jboss.org/seam/faces" xmlns:p="http://primefaces.org/ui" xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
        <cc:attribute name="tableId" />
        <cc:attribute name="param1" />
        <cc:attribute name="param2" default="false" />
        <cc:attribute name="param3" required="true" />
    </cc:interface>
    <cc:implementation>
        <p:dataTable id="#{cc.attrs.tableId}" rendered="#{cc.attrs.param2}" value="#{cc.attrs.param1}" var="result" emptyMessage="#{messages['global.noItemsFound']}">
                            <ui:include src="#{cc.attrs.param3}" />
        </p:dataTable>
    </cc:implementation>
</ui:component>
别忘了在视图中添加标题:

xmlns:u="http://java.sun.com/jsf/composite/ui"
columns.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.org/seam/faces" xmlns:u="http://java.sun.com/jsf/composite/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <p:column  headerText="Name">
        <h:outputText value="#{result.name}" />
    </p:column>
    <p:column  headerText="Salary">
        <h:outputText value="#{result.salary}" />
    </p:column>
    <p:column  headerText="Age">
        <h:outputText value="#{result.age}" />
    </p:column>
</ui:composition>



在复合组件中使用
并将另一个包含列数据的列表作为参数传递,这是包含列的单独视图的替代方法

谢谢你抽出时间。我有一个问题,在这种情况下,不同表的列数和数据数可能不同。例如:一个表可以有3列包含员工数据,另一个页面可能有5列包含部门数据的表。是否可以发送列详细信息(标题、大小等)和数据作为参数显示?这个设计能满足这个要求吗?在我的例子中已经是这样设计的了。只需将链接传递到单独的视图,并将其包含在复合构件中。在
param3=“/items/columns.xhtml”
中,您只包含列,并且可以拥有任意数量的列。你好,库巴,我需要更多建议,请帮助我。如何添加上下文菜单到它。在我的例子中,一个表可以有3个菜单,另一个菜单可以有2个带子菜单的菜单。如何在复合组件中进行概括和适应。最简单的方法是在CC中包含
。这意味着应仅为上下文菜单创建一个新的xhtml页面,并且此页面必须向复合组件传递一个参数。谢谢您的时间。我有一个问题,在这种情况下,不同表的列数和数据数可能不同。例如:一个表可以有3列包含员工数据,另一个页面可能有5列包含部门数据的表。是否可以发送列详细信息(标题、大小等)和数据作为参数显示?这个设计能满足这个要求吗?在我的例子中已经是这样设计的了。只需将链接传递到单独的视图,并将其包含在复合构件中。在
param3=“/items/columns.xhtml”
中,您只包含列,并且可以拥有任意数量的列。你好,库巴,我需要更多建议,请帮助我。如何添加上下文菜单到它。在我的例子中,一个表可以有3个菜单,另一个菜单可以有2个带子菜单的菜单。如何在复合组件中进行概括和适应。最简单的方法是在CC中包含
。这意味着应仅为上下文菜单创建一个新的xhtml页面,并且此页面必须向复合组件传递一个参数。谢谢您的时间。我有一个问题,在这种情况下,不同表的列数和数据数可能不同。例如:一个表可以有3列包含员工数据,另一个页面可能有5列包含部门数据的表。是否可以发送列详细信息(标题、大小等)和数据作为参数显示?这个设计能满足这个要求吗?在我的例子中已经是这样设计的了。只需将链接传递到单独的视图,并将其包含在复合构件中。在
param3=“/i