如何为Primefaces / JSF创建减少重复的代码?

时间:2017-07-25 04:57:50

标签: jsf primefaces jsf-2.2

我正在开发一个JSF项目,并且有很多重复的代码,如下所示:

正如您所看到的,两个单元格编辑器几乎相同,只有值不同。但我仍然无法找到避免重复的方法。

cabal install yi

我尝试创建像

这样的列合成
 SELECT
  CASE
    WHEN ISNUMERIC(@data) = 1 THEN CAST(@data AS int)
    ELSE NULL
  END

并像

一样使用它
<p:column headerText="DF" >
    <p:cellEditor>
        <f:facet name="output">
            <h:outputText value="#{payLeg.df}">
                <f:convertNumber pattern="###,##0.00" />
            </h:outputText>
        </f:facet>
        <f:facet name="input">
            <p:inputNumber value="#{payLeg.df}" />
        </f:facet>
    </p:cellEditor>
</p:column>
<p:column headerText="Forward Forward Rate" >
    <p:cellEditor>
        <f:facet name="output">
            <h:outputText value="#{payLeg.fwdfwd}">
                <f:convertNumber pattern="###,##0.00" />
            </h:outputText>
        </f:facet>
        <f:facet name="input">
            <p:inputNumber value="#{payLeg.fwdfwd}" />
        </f:facet>
    </p:cellEditor>
</p:column>

但我猜我将其创建为组件。因此dataTable不会将其识别为列。因此专栏没有显示出来。

那么有什么类似的方法可以实现吗?

1 个答案:

答案 0 :(得分:2)

如果要使用复合组件,则应排除p:column。有了下一个实现,它应该可以工作:

<composite:implementation>
    <p:cellEditor>
        <f:facet name="output">
            <h:outputText value="#{cc.attrs.value}">
                <f:convertNumber pattern="###,##0.00" />
            </h:outputText>
        </f:facet>
        <f:facet name="input">
            <p:inputNumber value="#{cc.attrs.value}" />
        </f:facet>
    </p:cellEditor>
</composite:implementation>

这个组件的用法如下:

<p:column>
    <components:editableNumberColumn headerText="Year Fraction" value="#{payLeg.yearFrac}" />
</p:column>

第二种方式是创建名为 MyNumberColumn.xhtml 的模板(例如),如下所示:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:f="http://java.sun.com/jsf/core">

    <p:column headerText="#{headerText}">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{value}">
                    <f:convertNumber pattern="###,##0.00" />
                </h:outputText>
            </f:facet>
            <f:facet name="input">
                <p:inputNumber value="#{value}" />
            </f:facet>
        </p:cellEditor>
    </p:column>

</ui:composition>

并将其纳入数据表:

<p:dataTable value="#{values..}" var="v" ...>
    <ui:include src="MyNumberColumn.xhtml">
        <ui:param name="headerText" value="Header for first column"/>
        <ui:param name="value" value="#{men.name}"/>
    </ui:include>

    <ui:include src="MyNumberColumn.xhtml">
        <ui:param name="headerText" value="Header for second column"/>
        <ui:param name="value" value="#{men.name}"/>
    </ui:include>
</p:dataTable>