2013-03-25 89 views
1

當我不稱爲複合組件上:encodeAll()時呈現的屬性被包裹

<h:form> 
    <ui:repeat ...> 
     <ui:fragment rendered="#{xyz.type eq 1}" 
      <h:inputText value="#{xyz}"/> 
     </ui:frament> 

     <ui:fragment rendered="#{xyz.type eq 2}" 
      <my:component value="#{xyz}"/> 
     </ui:frament> 
    <ui:repeat /> 
</h:form> 

encodeAll() doesen't被調用上my:component並且隨後的現有值未示出。

如果我這樣做,雖然

<ui:repeat ...> 
     <ui:fragment rendered="#{xyz.type eq 1}" 
      <h:inputText value="#{xyz}"/> 
     </ui:frament> 

     <ui:fragment rendered="#{xyz.type eq 2}" 
      <h:form> 
       <my:component value="#{xyz}"/> 
      </h:form> 
     </ui:frament> 
    <ui:repeat /> 

後者的例子是沒用的,當然,我希望能有動態輸入以下內容。現有的(默認)組件爲datepicker,inputtext,...函數ok,它只是我的組件不顯示現有值(encodeAll未調用)。

我也嘗試過h:datatable組件而不是ui:重複(不知道爲什麼),結果相同。

INFO: Initializing Mojarra 2.1.6 (SNAPSHOT 20111206) for context '/webclient' 
INFO: Running on PrimeFaces 3.5 
INFO: Running on PrimeFaces Extensions 0.6.3 
+0

它是自定義組件(Java)還是組合組件(XHTML)?你的問題標題和問題標籤是相互矛盾的。要知道區別,請閱讀http://stackoverflow.com/questions/6822000/when-to-use-uiinclude-tag-files-composite-components-and-or-custom-componen/6822269#6822269 – BalusC 2013-03-25 12:00:40

+0

這是一個自定義組件http://balusc.blogspot.de/2013/01/composite-component-with-multiple-input.html - 受你的代碼啓發 – apod 2013-03-25 12:25:12

+0

這不完全是一個自定義組件,這是一個複合組件。 – BalusC 2013-03-25 12:26:28

回答

4

根據給定的代碼,我無法重現你的問題,但我可以重現它,當我在PrimeFaces組件包裹。例如。當<ui:fragment><p:panel>(沒有rendered!)代替時。這是由PrimeFaces CoreRenderer單獨在renderChildren()方法中不調用UIComponent#encodeAll(),而是encodeBegin(),encodeChildren()encodeEnd()造成的。

如果您在encodeBegin()而不是encodeAll()執行作業,那麼它應該工作。我相應地更新了我的複合組件文章。

+0

謝謝BalusC,你剛剛救了我一天。 – apod 2013-03-25 12:56:27

+0

不客氣。 – BalusC 2013-03-25 12:56:32