我正在开发一个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不会将其识别为列。因此专栏没有显示出来。
那么有什么类似的方法可以实现吗?
答案 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>