2017-07-25 32 views
0

我正在開發一個JSF項目,並且有如下重複的代碼:如何爲Primefaces/JSF創建減少重複代碼?

正如您所看到的,兩個單元格編輯器幾乎相同,只是值不同。但我仍然無法找到避免重複的方法。

<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> 

我試圖創建一個列的複合像

<html lang="en" 
     xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:composite="http://java.sun.com/jsf/composite"> 
<h:body> 
    <composite:interface> 
     <composite:attribute name="headerText"/> 
     <composite:attribute name="value"/> 
    </composite:interface> 
    <composite:implementation> 
     <p:column headerText="#{cc.attrs.headerText}"> 
      <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> 
     </p:column> 
    </composite:implementation> 
</h:body> 
</html> 

而且使用它像

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

但我想,我創造了它作爲一個組件。所以dataTable不會將其識別爲列。所以專欄沒有出現。

那麼有沒有類似的方法可以實現這個目標?

回答

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> 

,這種成分的使用是這樣的:它與名MyNumberColumn.xhtml創建模板

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

方式二(例如)是這樣的:

<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> 

而且incude成數據表:

<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> 
+0

非常感謝! – Ming